【问题标题】:Using variables when referencing DOM jQuery DOM objects引用 DOM jQuery DOM 对象时使用变量
【发布时间】:2012-08-29 12:12:01
【问题描述】:

我试图理解为什么你不能用字符串和变量构造一个 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。但是,我的代码中仍然出现错误。 ("Uncaught Exception: Syntax error, unrecognized expression: .") 以下是发生的情况,以防万一有人感兴趣:

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

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

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

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

【问题讨论】:

  • 您使用的是. 而不是#. 将引用一个类。我错过了什么吗?你的 DOM 没有类。
  • 如果还不明显,jQuery 无法区分您的选择器是裸字符串还是字符串变量。

标签: jquery variables dom object


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    黄豆,

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

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

      test1.addClass('success');

    2. 这也可以,但是与第一种方法相比性能下降,因为没有缓存对象。不喜欢

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

      $(test2).addClass('success');

    3.这将不起作用,因为您是根据类而不是 ID 选择元素

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

    同样的错误,你使用的是基于类名的选择器

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

    有关更多详细信息,请查看 Stackoverflow 中 Jquery 的最佳实践

    【讨论】:

      【解决方案3】:

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

      . // class selector

      # // ID selector

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-05-18
              • 1970-01-01
              • 2013-06-18
              • 2014-05-12
              • 2014-05-17
              • 1970-01-01
              相关资源
              最近更新 更多