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

时间:2012-09-04 19:35:31

标签: jquery variables dom object

我试图理解为什么你不能用字符串和变量构造一个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');

这是a jsFiddle来演示。

我觉得我可能遗漏了一些基本的东西,但我在jQuery文档中找不到任何关于此的内容。

编辑: Doh,我应该注意到我在示例中使用了错误的选择器。我选择了mcpDESIGNS的答案,因为它确实修复了我的jsFiddle。但是,我的代码中仍然出现错误。 (“未捕获的异常:语法错误,无法识别的表达式:。”)以下是有人感兴趣的情况:

我试图获取URL中的当前哈希值,将字符串保存为变量,使用它来构造jQuery DOM对象,并将该对象传递给函数。

var hashTag = window.location.hash;
hashTag = hashTag.substr(1);

currentObject = $('.'+hashTag);
setSpriteX(currentObject);

我发现我没有考虑URL中没有哈希的时候。我需要做的就是在设置hashTag = 'defaulthash';之前添加currentObject

6 个答案:

答案 0 :(得分:3)

您需要$('#' + test3)var test4 = '#' + id;,因为您尝试通过 ID 选择而不是类。

. // class selector

# // ID selector

答案 1 :(得分:0)

'。'选择器是按类,而上面的选择是ID。改变'。'到'#'。

答案 2 :(得分:0)

就jQuery语法而言,你正在做的一切正确。您的问题是.选择器适用于类,而不是ID。使用#,您应该很好。

答案 3 :(得分:0)

您使用的是句号,而不是#。这是一个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/

答案 4 :(得分:0)

jaypea,

  1. 这是一个最好的方法,你必须遵循,因为缓存对象用于addClass

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

    test1.addClass( '成功');

  2. 这也可行,但性能下降与第一种方法相比因为没有缓存对象。不是优先考虑的

    //作品
    var test2 ='#test';

    $(TEST2).addClass( '成功');

  3. 3.这不起作用,因为您选择的是基于类而非ID

    的元素
       //Fails
       var test3 = 'test';
       $('.' + test3).addClass('success');
    

    相同的错误在之前,您使用的是基于类名称的选择器

    //Fails
    var id = 'test';
    var test4 = '.' + id;
    $(test4).addClass('success');
    

    了解更多详细信息在Stackoverflow中检查Jquery中的最佳实践

答案 5 :(得分:0)

你的jsFiddle代码中只有id,但是尝试按类

选择它们