可以使用matchedset.find(selector)
/matchedset.parents(selector)
獲取當前匹配集的後代/祖先,這些匹配集由選擇器過濾,但不包含匹配集本身(如果它碰巧也匹配選擇器)。有沒有更好的(更簡潔和/或更快)的方式來獲得它比Jquery:獲取祖先(或後代)和自我
matchedset.find(selector).add(matchedset.filter(selector))
和各自的父母()?
可以使用matchedset.find(selector)
/matchedset.parents(selector)
獲取當前匹配集的後代/祖先,這些匹配集由選擇器過濾,但不包含匹配集本身(如果它碰巧也匹配選擇器)。有沒有更好的(更簡潔和/或更快)的方式來獲得它比Jquery:獲取祖先(或後代)和自我
matchedset.find(selector).add(matchedset.filter(selector))
和各自的父母()?
你可以這樣做:
matchedset.find('*').andSelf().filter(selector);
對於家長:
matchedset.parents('*').andSelf().filter(selector);
我覺得你的方法是在執行時間方面是高效的,但你可能會問的是語法糖。對於這一點,你可以把它包裝成一個插件:
jQuery.fn.findAndSelf = function(selector) {
return this.find(selector).add(this.filter(selector))
}
然後使用它是這樣的:
$('.whatever').findAndSelf('.awesome')
如果你想獲得看上你可以創建一個不僅對「發現」工作的插件但對於「父母」和「孩子」和其他基於選擇器插件:
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')
雖然Jeoff的解決方案是好的,有時真的很高興能夠遍歷所有元素,包括它自己沒有選擇。這種附加是一個比較靈活:
$.fn.all = function(selector) {
if(selector===window.undefined) return this.find('*').andSelf();
return this.filter(selector).add(this.find(selector));
};
對於父母你有closest(selector)
哪個更好? '.find('*')''或'.contents()'就像:http://stackoverflow.com/questions/364791/jquery-select-descendants-including-the-parent – Joe 2012-09-11 19:55:14
可能是一個好主意,注意到andSelf現在已被棄用,並已被接受選擇器的addBack()所取代。 http://api.jquery.com/addBack/ – 2013-02-14 09:07:07