可以使用matchedset.find(selector)
/ matchedset.parents(selector)
来获取由选择器过滤的当前匹配集的后代/祖先,但这不包括匹配集本身(如果它恰好匹配选择器也)。是否有比
matchedset.find(selector).add(matchedset.filter(selector))
和父母的相应()?
答案 0 :(得分:44)
你可以这样做:
matchedset.find('*').andSelf().filter(selector);
对于父母:
matchedset.parents('*').andSelf().filter(selector);
答案 1 :(得分:17)
我认为你的方法在执行时间方面是有效的,但你可能要求的是语法糖。为此,您可以将其包装到插件中:
jQuery.fn.findAndSelf = function(selector) {
return this.find(selector).add(this.filter(selector))
}
然后像这样使用它:
$('.whatever').findAndSelf('.awesome')
如果你想获得幻想,你可以创建一个不仅适用于'find'而且适用于'parent'和'children'以及其他基于选择器的插件的插件:
jQuery.fn.withSelf = function(plugin, selector) {
return this[plugin](selector).add(this.filter(selector))
}
然后,您将提供要调用的遍历插件的第一个参数:
$('.whatever').withSelf('find', '.awesome')
$('.whatever').withSelf('parents', '.awesome')
只是为了踢,另一个有趣的插件,让你可以同时调用任意数量的遍历插件:
jQuery.fn.traverse = function(plugins, selector) {
var set = new jQuery();
$.each(plugins, function(i, val) {
set.add(this[val](selector));
}
return set
}
你可以使用基于选择器的插件的任意组合来调用这个插件,如下所示:
$('.whatever').traverse(['find','filter'], '.awesome')
$('.whatever').traverse(['parents','find'], '.awesome')
$('.whatever').traverse(['parents', 'filter'], '.awesome')
答案 2 :(得分:2)
虽然Jeoff的解决方案很好,但有时能够迭代所有元素,包括没有选择器的自身也很好。这个附加组件更灵活:
$.fn.all = function(selector) {
if(selector===window.undefined) return this.find('*').andSelf();
return this.filter(selector).add(this.find(selector));
};
答案 3 :(得分:0)
查找“andSelf()”函数。
答案 4 :(得分:0)
对于父母,您有closest(selector)