使用多个选择器查找prev()标记

时间:2012-06-09 14:30:35

标签: javascript jquery xpath jquery-selectors

让我们面对这种情况:

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

我要做的是匹配li类或具有类属性selector的{​​{1}},如下所示:

undefined

因此,如果我在jQuery(function($) { $('.selector2').prevAll('li.selector OR li[class==""]'); }); 上运行prevAll(),则应返回2个列表项。如果我在.selector2上运行它,它应该返回第一个列表项。

那么有没有办法取代那个OR??

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

2 个答案:

答案 0 :(得分:5)

jQuery(function($) {
  $('.selector2').prevAll('li.selector, li:not([class])');
});

<强> DEMO

从@pimvdb添加重要评论

  

这是正确的,但要小心 - 像   .addClass("foo").removeClass("foo")保留class属性   尽管你(可能)期望它处于初始状态。所以   它与[class='']不完全相同。

答案 1 :(得分:4)

  

我想要做的就是匹配{&#34;选择器&#34;类   或者具有未定义的类属性

此XPath表达式等同于问题中的伪代码

li

但是,所引用要求的文字翻译为

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