【问题标题】:Simplify jQuery Selector简化 jQuery 选择器
【发布时间】:2010-11-15 11:56:49
【问题描述】:

我有一个选择器“td > a.leftmenuitem:last, div > a.leftmenuitem:last”,我想稍微简化一下。我已经尝试过“* > a.leftmenuitem:last”、“td, div > a.leftmenuitem:last”和“(td, div) > a.leftmenuitem:last”,它们都不像第一个选择器那样工作。如果不为每个选择器创建单独的选择器,这种事情在选择器语法中是不可能的吗?

【问题讨论】:

    标签: jquery syntax selector simplify


    【解决方案1】:

    你使用的选择器是

    Parent > Child 
    

    匹配Child 指定的所有子元素和Parent 指定的元素。除非您在页面的其他地方使用不是<div><td> 元素的子元素的<a> 元素,否则为什么不直接使用

    $('a.leftmenuitem:last')
    

    我错过了什么吗?

    【讨论】:

      【解决方案2】:

      你不能简化:

      td > a.leftmenuitem:last, div > a.leftmenuitem:last
      

      没有共同点,因此您可以使用一个表达式选择所有相关的 td 和 div 元素。例如,如果他们都有 blah 类,你可以这样做:

      .blah > a.leftmenuitem:last
      

      但如果可以避免,请不要使用这种表达方式。类选择器很慢(与 ID 和标签选择器相比)。

      只是有什么问题吗?

      a.leftmenuitem:last
      

      ?

      顺便问一下,你确定:last 是正确的选择吗?很多人误用它,误以为:last-child:last 只会匹配一个元素,即页面上找到的最后一个匹配元素。

      【讨论】:

      • 啊,是的!当然 :last-child 效果很好。我想知道为什么只使用 a.leftmenuitem:last 不起作用。谢谢!
      【解决方案3】:

      也许我只是感到困惑,但如果

      * > a.leftmenuitem:last
      

      对你有用,那为什么不去呢

      a.leftmenuitem:last
      

      改为?

      【讨论】:

        【解决方案4】:

        您的选择器很简单。如果你想简化它,你可以这样做:

        $('a.leftmenuitem:last').parent().doWhateverYouWereGoingToDo();
        

        不过,我怀疑这会导致更快的执行时间。

        【讨论】:

          【解决方案5】:

          我认为你不能简化它。相反,我会选择提供您对独特课程感兴趣的链接,以便您可以简单地执行"a.<my-unique-class>:last"。这样 jquery 可以简单地扫描所有匹配的 <a> 标签,而不必担心它们的父元素是 <td> 元素。

          【讨论】:

            【解决方案6】:

            更大的东西,有时更快。当您使用 * 而不是 td 时,您的查询会慢得多。

            【讨论】:

              猜你喜欢
              • 2020-08-29
              • 2014-12-06
              • 1970-01-01
              • 2011-08-27
              • 2011-06-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-01-03
              相关资源
              最近更新 更多