2011-07-15 3 views
2

Existe-t-il un moyen plus court d'écrire ceci? Dans la mesure où je peux dire, il n'y a aucun moyen de rechercher tous les descendants, y compris lui-même, sans le faire?Raccourci pour filtrer tous les éléments, y compris le self?

S'il n'y a pas de fonction pour cela, j'en écrirai une, mais je ne veux pas réinventer la roue si elle existe déjà.


Ici, il est (révisé):

(function($,undefined) { 
    $.fn.all = function(selector) { 
     if(selector===undefined) return this.find('*').andSelf(); 
     return this.find(selector).add(this.filter(selector)); 
    } 
})(jQuery); 
+0

Non, cette roue n'existe pas actuellement (il n'existe pas de méthode "anti" -closure() 'qui parcourt la hiérarchie des éléments). Vous pouvez aller de l'avant et l'inventer. Cependant, gardez à l'esprit que 'andSelf()' * does * existe et que son invocation ne prend que 9 caractères. –

+0

@Frederic: Ce n'est pas seulement 9 caractères, car j'ai aussi besoin de ce stupide '.find ('*')', ce qui est probablement inefficace parce qu'il récupère tous les éléments, plutôt que ceux que je veux. – mpen

Répondre

2

Non il n'y a pas moyen de le faire dans l'API, bien que Je pense que vous pouvez obtenir de meilleurs résultats de performance si vous faites un .find() normal avec un sélecteur, puis appliquez le .filter() seulement à l'élément lui-même.

var all = $myelements.find(myselector).add($myelements.filter(myselector)); 

De cette façon, querySelectorAll peut être utilisé si vous utilisez un sélecteur valide. Dans le cas contraire, vous effectuez le filtre entièrement avec du code JavaScript au lieu du code natif (dans les navigateurs pris en charge).

Bien sûr, vous pouvez aussi en faire un plugin.

0

Pas vraiment beaucoup mieux:

$($myelements + ', ' + $myelements + ' > *').filter(myselector); 
+2

C'est pire mec :) – AlienWebguy

+0

Ouais, c'est en fait * plus * caractères. : D – wanovak

+1

Supposez-vous que $ myelements est une chaîne? Le '$' précédent est une convention utilisée pour indiquer que c'est un objet jquery, ce qui est évident par le fait que je l'utilisais comme un objet. c'est-à-dire que cela ne marchera même pas. – mpen

Questions connexes