Je pense que votre méthode est efficace en termes de temps d'exécution, mais ce que vous vous demandez probablement est le sucre syntaxique. Pour cela, vous pouvez l'envelopper dans un plugin:
jQuery.fn.findAndSelf = function(selector) {
return this.find(selector).add(this.filter(selector))
}
utiliser ensuite comme ceci:
$('.whatever').findAndSelf('.awesome')
Si vous voulez obtenir la fantaisie, vous pouvez créer un plugin qui fonctionne non seulement pour « trouver » mais pour « parents » et « enfants » et d'autres plug-ins à base sélecteur-:
jQuery.fn.withSelf = function(plugin, selector) {
return this[plugin](selector).add(this.filter(selector))
}
alors vous l'offre comme le premier argument du plug-in traversal que vous voulez appeler:
$('.whatever').withSelf('find', '.awesome')
$('.whatever').withSelf('parents', '.awesome')
Juste pour voir, un autre plugin amusant qui vous permet d'appeler un nombre arbitraire de plugins traversal à 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 pouvez appeler celui-ci avec une combinaison de plug-ins à base de sélection, comme suit :
$('.whatever').traverse(['find','filter'], '.awesome')
$('.whatever').traverse(['parents','find'], '.awesome')
$('.whatever').traverse(['parents', 'filter'], '.awesome')
Quel est le meilleur? '.find ('*')' ou '.contents()' comme dans: http://stackoverflow.com/questions/364791/jquery-select-descendants-including-the-parent – Joe
Probablement une bonne idée de noter que andSelf est maintenant déprécié et a été remplacé par addBack() qui accepte également un sélecteur. http://api.jquery.com/addBack/ –