在引用DOM jQuery DOM对象时使用变量



我试图理解为什么不能用字符串和变量(即使变量也是字符串)构造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,

  1. 这是一个最好的方法,你必须遵循,因为缓存对象正在使用添加类

    //作品var test1=$('#test');

    test1.addClass("成功");

  2. 这也会起作用,但与第一种方法相比性能下降,因为没有缓存对象。不优选

    //作品
    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,但试图通过类来选择它们

最新更新