Tôi nghĩ rằng phương pháp của bạn là hiệu quả về thời gian thực hiện, nhưng những gì có thể là bạn đang yêu cầu là đường cú pháp. Cho rằng, bạn có thể quấn nó thành một plugin:
jQuery.fn.findAndSelf = function(selector) {
return this.find(selector).add(this.filter(selector))
}
Sau đó sử dụng nó như thế này:
$('.whatever').findAndSelf('.awesome')
Nếu bạn muốn nhận được ưa thích bạn có thể tạo một plugin mà làm việc không chỉ cho 'tìm' nhưng đối với phụ huynh 'và 'trẻ em' và plugin chọn khác dựa trên:
jQuery.fn.withSelf = function(plugin, selector) {
return this[plugin](selector).add(this.filter(selector))
}
Sau đó, bạn muốn cung cấp như là đối số đầu tiên traversal cắm bạn muốn gọi:
$('.whatever').withSelf('find', '.awesome')
$('.whatever').withSelf('parents', '.awesome')
Chỉ cần cho đá, một plugin thú vị mà cho phép bạn gọi một số tùy ý các plugin traversal tất cả cùng một lúc:
jQuery.fn.traverse = function(plugins, selector) {
var set = new jQuery();
$.each(plugins, function(i, val) {
set.add(this[val](selector));
}
return set
}
Bạn có thể gọi một này với bất kỳ sự kết hợp của các plugin chọn dựa trên, như sau :
$('.whatever').traverse(['find','filter'], '.awesome')
$('.whatever').traverse(['parents','find'], '.awesome')
$('.whatever').traverse(['parents', 'filter'], '.awesome')
Đó là tốt hơn? '.find ('*')' hoặc '.contents()' như trong: http://stackoverflow.com/questions/364791/jquery-select-descendants-including-the-parent – Joe
Có thể là một ý tưởng hay để lưu ý rằng andSelf hiện không được chấp nhận và đã được thay thế bằng addBack() cũng chấp nhận công cụ chọn. http://api.jquery.com/addBack/ –