根据成功的元素选择一个元素

时间:2013-01-11 00:39:50

标签: jquery jquery-selectors

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

例如,如果我有一个看起来像这样的集合:

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

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

$("div:preceding(span)")

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

提前致谢!

3 个答案:

答案 0 :(得分:5)

尝试.prev()

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

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

答案 1 :(得分:1)

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

我不知道选择器会实现$("div:preceding(span)")

之类的东西

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

$("div").filter(function() {
    return($(this).next("span").length != 0);
});

答案 2 :(得分:1)

你去,你的自定义选择器:preceding
你可以完全按照自己的意愿使用(例如:):$('div:preceding(span)').css({color: 'red'});

jsBin demo

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