1

jQuery中是否有任何选择器字符串可以让我通过仅选择其后具有特定元素的元素来过滤集合?

例如,如果我有一个如下所示的集合:

[div, div, span, div, div, div, span, div, span, div]

而且我只想选择跨度之前的 div,如果可能的话,我怎么能在单个选择器字符串中执行此操作?有没有这样的东西:

$("div:preceding(span)")

这不是什么大不了的事,但我只是好奇。目前,我只是遍历集合并检查每个元素以查看它是否是 div 并且紧随其后的元素(使用 .next() 选择)是一个跨度,如果是,我只需将其添加到在我开始循环之前创建了一个空集。这是解决这个问题的最好方法吗?

提前致谢!

4

3 回答 3

5

尝试.prev()

$('span').prev('div');

匹配所有div其下一个直接兄弟元素是 a 的元素span

于 2013-01-11T00:42:14.457 回答
1

好了,您的自定义选择器:preceding
可以完全按照您的需要使用(例如:):$('div:preceding(span)').css({color: 'red'});

jsBin 演示

$.expr[":"].preceding = function(e, i, m) {
   return $(e).next(m[3]).length;
};

于 2013-01-11T01:48:55.643 回答
1

我认为您必须对广泛的集合使用选择器(而不是查看它之后的内容),然后使用它.filter()来删除后面没有所需元素的项目。

我不知道有一个选择器会实现类似$("div:preceding(span)").

preceding可以像在 jQuery 选择器支持中那样实现自己的自定义动词,但是这样做可能比.filter()像这样使用更麻烦:

$("div").filter(function() {
    return($(this).next("span").length != 0);
});
于 2013-01-11T00:55:08.597 回答