Я думаю, что ваш метод эффективен с точки зрения времени выполнения, но вы, вероятно, просите синтаксический сахар. Для этого вы можете заключить его в плагин:
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')