2012-09-04 36 views
2

我想知道为什么你不能用一个字符串和变量构造一个jQuery DOM对象(即使变量也是一个字符串)。在引用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'); 

这里的a jsFiddle来演示。

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

编辑:卫生署,我应该已经注意到我使用了错误的选择的例子。我选择了mcpDESIGNS的答案,因为它确实修复了我的jsFiddle。不过,我的代码仍然出现错误。 (“未捕获的异常:语法错误,无法识别的表达式:。”)下面是发生什么事以防万一谁感兴趣:

我试图在URL中使用当前散列,将字符串保存为变量,构造一个jQuery DOM对象,并将该对象传递给一个函数。

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

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

我想通了,我不占当时有没有在URL中的哈希值。所有我需要做的是添加hashTag = 'defaulthash';之前,我设置currentObject

+1

您正在使用'.'而不是'#','''会引用一个类。我错过了什么吗?你的DOM没有类。 –

+0

如果还不明显,jQuery无法区分您的选择器是裸线还是字符串变量。 –

回答

3

您需要有$('#' + test3)var test4 = '#' + id;,因为您试图选择ID的不是类。

. // class selector

# // ID selector

0

的 ''选择器是通过类,而上面的是通过ID。更改'。'至 '#'。

0

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

0

您正在使用一段时间而不是#。这是一个身份证,而不是一个班。

//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/

0

jaypea,

  1. 这是一个最佳途径,你必须遵循,因为缓存对象是使用到addClass

    //作品 test1的变种= $('#test');

    test1.addClass('success');

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

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

    $(TEST 2)。addClass( '成功');

3,本是行不通的,因为你是基于类选择元素不是ID

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

相同犯规在上一页中所做的,正在使用类基于名称的选择

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

对于更多详细信息检查在Stackoverflow中的jquery的最佳实践

1

你只有id在你的jsFi ddle代码,但尝试按类别选择它们