【问题标题】:Find prev() tags with several selectors使用多个选择器查找 prev() 标签
【发布时间】:2012-06-13 06:41:15
【问题描述】:

让我们面对这种情况:

<ul>
  <li>data</li>
  <li class="selector">data2</li>
  <li class="selector2">data3</li>
</ul>

我想做的是匹配lis 要么有selector 类或有类属性undefined,像这样:

jQuery(function($) {
  $('.selector2').prevAll('li.selector OR li[class==""]');
});

因此,如果我在 .selector2 上运行 prevAll(),它应该返回 2 个列表项。如果我在.selector 上运行它,它应该返回第一个列表项。

那么有没有办法替换那个 OR ... ?

PS:xpath 可能也适用于我,因为我正在为现代浏览器开发

【问题讨论】:

    标签: javascript jquery xpath jquery-selectors


    【解决方案1】:
    jQuery(function($) {
      $('.selector2').prevAll('li.selector, li:not([class])');
    });
    

    DEMO

    添加来自@pimvdb 的重要评论

    这是正确的,但要小心 - 比如 .addClass("foo").removeClass("foo") 离开类属性 后面,尽管您(可能)期望它处于初始状态。所以 和[class='']不太一样。

    【讨论】:

    • 这是正确的,但要小心——像.addClass("foo").removeClass("foo") 这样的东西会留下class 属性,尽管您(可能)希望它处于初始状态。所以和[class='']不太一样。
    【解决方案2】:

    我想要做的是匹配具有“选择器”类的lis 或未定义类属性

    这个XPath表达式相当于问题中的伪代码

    /ul/li[@class='selector2']/preceding-sibling::li[@class='selector' or not(@class)]
    

    但是,引用要求的字面翻译是

    /ul/li[@class='selector' or not(@class)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-19
      • 1970-01-01
      • 2010-10-17
      • 2019-05-15
      相关资源
      最近更新 更多