Je pense que votre méthode est efficace en termes de temps d'exécution, mais ce que vous êtes probablement demander est sucre syntaxique. Pour que, vous pouvez l'envelopper dans un plugin:
jQuery.fn.findAndSelf = function(selector) {
return this.find(selector).add(this.filter(selector))
}
Ensuite l'utiliser comme ceci:
$('.whatever').findAndSelf('.awesome')
Si vous vouliez obtenir la fantaisie, vous pourriez créer un plugin qui fonctionne non seulement pour "trouver", mais pour "parents" et "enfants" et d'autres sélecteur à base de plugins:
jQuery.fn.withSelf = function(plugin, selector) {
return this[plugin](selector).add(this.filter(selector))
}
Puis vous auriez approvisionnement comme premier argument de la traversée de plugin que vous voulez l'appeler:
$('.whatever').withSelf('find', '.awesome')
$('.whatever').withSelf('parents', '.awesome')
Juste pour le plaisir, plaisir un autre plugin qui vous permet d'appeler un nombre arbitraire de la traversée de plugins tout à la fois:
jQuery.fn.traverse = function(plugins, selector) {
var set = new jQuery();
$.each(plugins, function(i, val) {
set.add(this[val](selector));
}
return set
}
Vous pourriez appeler cela un avec n'importe quelle combinaison de sélecteur à base de plugins, comme suit:
$('.whatever').traverse(['find','filter'], '.awesome')
$('.whatever').traverse(['parents','find'], '.awesome')
$('.whatever').traverse(['parents', 'filter'], '.awesome')