【问题标题】:Chaining jquery selectors. I put all anchors into a variable, and I want to then select one of the anchors using id链接 jquery 选择器。我将所有锚点放入一个变量中,然后我想使用 id 选择其中一个锚点
【发布时间】:2011-07-13 04:34:32
【问题描述】:

我这样做(它工作正常,我将宽度等分配给所有锚点):

var anchors = jQuery("#myDiv a");

然后我想从 var 中选择一个特定的锚点,这不起作用:

anchors("#anchor01").addClass("myClass");

这也不是:

anchors.find("#anchor01").addClass("myClass");

我意识到我可以做到jQuery("#anchor01"),但我认为从存储在 var 中已经减少的元素中进行选择会更快。这一定很明显……

【问题讨论】:

    标签: java jquery html


    【解决方案1】:

    ID 选择器将比通过 ID 获取 div 的所有锚点并在锚点中通过 ID 获取锚点更快。使用 ID 选择器,并仅在您测量到某项存在性能问题时进行优化。

    【讨论】:

      【解决方案2】:

      使用filter()[docs] 方法。

      anchors.filter("#anchor01").addClass("myClass");
      

      如果您不介意稍微偏离 jQuery,可以使用 getElementsByTagName(),并使用 ID 作为 NodeList 的属性访问元素。

      var anchors = document.getElementById("myDiv").getElementsByTagName("a");
      
      $( anchors.anchor01 ).addClass("myClass");
      

      示例: http://jsfiddle.net/Tphfb/


      编辑:

      使用NodeList 是迄今为止最快的。 Here's a jsPerf.

      另外,因为它是一个“实时列表”,它会在锚点添加到myDiv 或从myDiv 中删除时自动更新。

      【讨论】:

        【解决方案3】:

        anchors.find() 查找匹配元素的后代。如果要过滤结果,可以使用anchors.filter('#anchor01')

        但是在这种情况下,最好直接使用 id 选择器。这个:

        jQuery("#anchor01").addClass("myClass");
        

        ...比这更短更精确...

        var anchors = jQuery("#myDiv a");
        anchors.filter("#anchor01").addClass("myClass");
        

        这两个示例都能为您提供所需的元素。然而,作为一个数学教授曾经提到的例子:你可以用很多卫生纸来完成这项工作,它会起作用,但你只是在浪费卫生纸。

        【讨论】:

          猜你喜欢
          • 2020-09-06
          • 2013-07-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-10
          相关资源
          最近更新 更多