2010-03-29 9 views
2

Je suis un javascript noob.Javascript Comment?

Je voudrais sélectionner le second élément 'p' de la div.box. Comment est-ce que je fais ceci?

Merci beaucoup! Tom

Répondre

1

Sans utiliser jQuery, la méthode de base serait d'attacher un identifiant unique à votre élément Dom

<p id="second_p_elmt"> [...] </p> 

puis d'y accéder par la méthode getElementById():

<script ...> 
    var second_p_elmt = document.getElementById('second_p_elmt'); 
</script> 
+1

Je suis d'accord avec vous. Il est beaucoup moins enclin à casser pour attacher un identifiant. Ensuite, lorsque vous insérez un nouveau paragraphe et que cela devient le troisième paragraphe, toutes vos traversées DOM ne vont pas se casser. –

4

Pour obtenir le deuxième élément p de div avec la boîte de classe que vous feriez:

var paragraph = null; 
var divs = document.findElementsByTagName('div'); 
for (var i = 0; i < divs.length; i++) { 
    var div = divs[i]; 
    if (div.class == 'box') { 
     var paragraphs = div.getElementsByTagName('p'); 
     if (paragraphs.length > 1) 
      paragraph = paragraphs[1]; 
     break; 
    } 
} 

Le paragraphe serait alors dans la variable paragraph (ou null s'il n'était pas trouvé).

Cependant, vous pouvez le faire beaucoup plus facile avec une bibliothèque, comme jQuery:

var paragraph = $('div.box p:eq(1)'); 
+0

Dans jQuery, vous devez sélectionner le noeud DOM spécifiquement: '$ ('div.box p: eq (1)'). Get (1)'. Sinon, vous obtenez juste un objet jQuery, et il manque littéralement toutes les interfaces DOM. – Boldewyn

+1

En fait avec .get (0) ou juste [0], car p: eq (1) a déjà sélectionné le deuxième paragraphe. –

1
<script type="text/javascript"> 
    var boxElem = document.getElementById('box'), 
     pElems = boxElem.getElementsByTagName('p'), 
     whatYouWant = pElems[1]; // [1] is the second element in the response from getElementsByTagName 
</script> 
+0

désolé - j'ai mal lu la question. Cette réponse s'appliquerait à "div # box p [1]" – David

0

Vous avez plusieurs options. Comme indiqué ci-dessus, vous pouvez utiliser l'un des excellents frameworks, comme jQuery ou le prototype. Ou vous donnez le <p/> un ID, que vous pouvez utiliser simplement avec document.getElementById(). Ensuite, comme le souligne reko_t, sans ce qui précède, vous devez écrire un long code de déplacement DOM (ce qui est préférable, si vous n'utilisez pas les frameworks JS ailleurs, en les intégrant uniquement pour cette tâche).

Dans les navigateurs les plus récents (à savoir, IE> = 8, FF> = 3.5, récemment Opera et Safari> 3) vous pouvez également utiliser ce simple extrait:

var p = document.querySelectorAll("div.box p"); 
+0

@Boldewyn: 'querySelector' et' querySelectorAll' sont tous deux supportés par IE8. En fait, IE8 l'avait (mars 2009) avant Firefox (v3.5 juin 2009) –

+0

@Andy E: Merci de m'avoir signalé. Cependant, ceci vous appelez le support: http://ejohn.org/blog/selectors-api-test-suite-in-ie8/? Cependant, vous avez un point, et je vais corriger la réponse. – Boldewyn

Questions connexes