我试图理解为什么不能用字符串和变量(即使变量也是字符串)构造jQuery DOM对象。
//Works
var test1 = $('#test');
test1.addClass('success');
//Works
var test2 = '#test';
$(test2).addClass('success');
//Fails
var test3 = 'test';
$('.' + test3).addClass('success');
//Fails
var id = 'test';
var test4 = '.' + id;
$(test4).addClass('success');
下面是一个要演示的jsFiddle。
我觉得我可能遗漏了一些基本的东西,但在jQuery文档中找不到任何关于这方面的内容。
EDIT:Doh,我应该注意到我在示例中使用了错误的选择器。我选择了mcpDESIGNS的答案,因为它确实修复了我的jsFiddle。然而,我的代码中仍然有一个错误。("未捕获的异常:语法错误,无法识别的表达式:。")以下是发生的情况,以防有人感兴趣:
我试图获取URL中的当前哈希,将字符串保存为一个变量,用它来构造一个jQueryDOM对象,并将该对象传递到一个函数中。
var hashTag = window.location.hash;
hashTag = hashTag.substr(1);
currentObject = $('.'+hashTag);
setSpriteX(currentObject);
当URL中没有散列时,我发现我没有考虑。我所需要做的就是在设置currentObject
之前添加hashTag = 'defaulthash';
。
您需要有$('#' + test3)
和var test4 = '#' + id;
,因为您试图通过ID的非类进行选择。
. // class selector
# // ID selector
"."选择器是按类的,而上面的选择器是按ID的。更改"。"到"#"。
就jQuery语法而言,一切都做得很好。您的问题是.
选择器用于类,而不是ID。使用#
,你应该是好的。
您使用的是句点而不是#
。这是一个id,而不是一个类。
//Fails no more
var test3 = 'test3';
$('#' + test3).addClass('success');
//Fails no more
var id = 'test4';
var test4 = '#' + id;
$(test4).addClass('success');
http://jsfiddle.net/Guffa/QeWLu/2/
jaypea,
-
这是一个最好的方法,你必须遵循,因为缓存对象正在使用添加类
//作品var test1=$('#test');
test1.addClass("成功");
-
这也会起作用,但与第一种方法相比性能下降,因为没有缓存对象。不优选
//作品
var test2='#test';$(test2).addClass("成功");
3.这将不起作用,因为你是根据类别而不是ID 来选择元素
//Fails
var test3 = 'test';
$('.' + test3).addClass('success');
与以前的错误相同,您使用的是基于类名的选择器
//Fails
var id = 'test';
var test4 = '.' + id;
$(test4).addClass('success');
有关更多详细信息,请查看Stackoverflow 中Jquery中的最佳实践
您的jsFiddle代码中只有id,但试图通过类来选择它们