我试图理解为什么你不能用字符串和变量构造一个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
。
答案 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');
答案 4 :(得分:0)
jaypea,
这是一个最好的方法,你必须遵循,因为缓存对象用于addClass
//作品 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中的最佳实践
答案 5 :(得分:0)
你的jsFiddle代码中只有id,但是尝试按类
选择它们