2010-12-10 7 views
1

Dans l'extrait jQuery suivant, pourquoi l'objet foo2 ne contient-il aucun élément? Mon alerte me montre que foo1 contient des éléments DOM. Ne devrait pas trouver ("*") alors juste retourner ce qui est effectivement un clone de foo1?Débutant Question jQuery, création d'éléments DOM à la volée

var foo1 = $("<div id='content'>HAGGIS</div>"); 
var foo2 = foo1.find("*"); 

alert("foo1("+foo1.length+"): "+$('<div>').append(foo1.clone()).remove().html() 
    + "\n\n" + 
     "foo2("+foo2.length+"): "+$('<div>').append(foo2.clone()).remove().html()); 

Répondre

2

De la documentation jQuery environ .find()

Description: Obtenir les descendants de chaque élément dans l'ensemble courant de éléments appariés, filtré par un sélecteur .

foo1 n'a pas de descendance.

+0

Merci, je savais que ce serait simple. Vous étiez le premier à répondre, le vôtre est marqué comme la réponse acceptée. – richb

3

foo2 n'a pas d'éléments, car le sélecteur est pour tous les enfants de foo1, qui n'a pas d'éléments de l'enfant, juste un nœud de texte.

+1

+1 - Droite. 'foo1.filter (" * ");' le fera. – karim79

+0

Merci, Gaby l'a eu en premier donc il a eu la réponse acceptée. – richb

+1

@richb Comment Gaby l'a-t-elle obtenu en premier quand ma réponse était 3 minutes plus tôt (et [la réponse de Reigel] (http://stackoverflow.com/questions/4404707/newbie-jquery-question-creating-dom-elements-on-the -fly/4404738 # 4404738) était 2 minutes plus tôt)? – alex

1

Non, si je comprends bien votre question, alors je dirais que find() cherchera les enfants. C'est pourquoi foo2.length vous donnera 0. Si vous voulez le clone de foo1 alors var foo2 = foo1.clone(); serait le bon.