2

我试图理解为什么你不能用字符串和变量构造一个 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 文档中找不到任何关于此的内容。

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

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

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

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

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

4

6 回答 6

3

你需要有$('#' + test3)var test4 = '#' + id;因为你试图通过ID的而不是类来选择。

. // class selector

# // ID selector

于 2012-09-04T19:37:36.217 回答
0

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

于 2012-09-04T19:37:49.250 回答
0

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

于 2012-09-04T19:38:09.230 回答
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/

于 2012-09-04T19:39:11.133 回答
0

鹰嘴豆,

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

    //工作 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 的最佳实践

于 2012-09-04T19:47:00.323 回答
0

您的 jsFiddle 代码中只有 id,但尝试按类选择它们

于 2012-09-04T19:48:29.813 回答