6

让我们面对这种情况:

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

我想要做的是 matchli要么有selectorclass 要么有 class 属性undefined,像这样:

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

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

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

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

4

2 回答 2

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

演示

添加来自@pimvdb 的重要评论

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

于 2012-06-09T14:32:02.733 回答
4

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

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

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

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

/ul/li[@class='selector' or not(@class)]
于 2012-06-09T14:37:48.450 回答