2010-03-23 2 views
0

Disons que nous avons ce qui suit:Comment enregistrer la valeur d'un élément sélectionné par le style de tableau dans jQuery?

<p class="first">This is paragraph 1.</p> 
<p class="second">This is paragraph 2.</p> 
<p id="third">This is paragraph 3.</p> 
<p>This is paragraph 4.</p> 

Nous pouvons sauver la valeur d'un élément dans value variable et montrer comme ça.

var value = $('p').slice(3,4); 
value.text(); // result --> This is paragraph 4 

Au-dessus de façon n'a pas de problème si nous savons que le nombre d'éléments mais nous y reviendrons problème si nous avons beaucoup d'éléments et que nous voulons faire avec looping. pourquoi je me trompe si je fais comme ça?

$('p')[3].text(); 

Que dois-je faire si je veux boucler et obtenir des valeurs?

Répondre

2

boucle comme ceci:

$('p').each(function(i) { 
    alert($(this).text()); 
    //or this: 
    alert($('p').eq(i).text()); 
}); 

Lorsque vous [3] vous obtenez l'élément DOM <p> non l'objet jQuery, qui a la méthode .text().

$('p')[3] == DOM Element, doesn't have `.text()` 
$('p').eq(3) == jQuery object, has `.text()` 
1

objets jQuery peuvent fonctionner comme des réseaux d'éléments DOM, et non pas d'autres objets jQuery.
Par conséquent, l'écriture $(...)[3] vous donne un élément DOM brut, pas un objet jQuery.

Vous devez appeler la fonction eq:

$('p').eq(3).text(); 
1

Le problème avec ce que vous essayez de faire est que $('p')[3] ne reviendra pas un objet jQuery, et donc il ne dispose pas d'une fonction text().

Au lieu de cela, utiliser quelque chose comme ceci:

$('p.eq(3)') 

// OR 

$('p').eq(3) 

Une règle générale est que si vous n'êtes pas sûr si oui ou non un objet a des méthodes jQuery, vous êtes probablement bien hors emballage simplement en $(...) ou jQuery(...), ce dernier étant utilisé plus si vous utilisez jQuery.noConflict(); (et donc en utilisant Prototype ou une autre bibliothèque qui utilise $ comme variable).

1

La raison de votre erreur est que vous obtenez l'élément DOM réel lorsque vous l'obtenez en utilisant la notation de tableau. L'élément DOM n'a pas de fonction text(). Pour obtenir toutes les valeurs, utilisez chacune.

var values = []; 
$('p').each(function(i) { 
    values[i] = $(this).text(); 
} 

Pour obtenir un élément particulier, utilisez eq();

var value = $('p').eq(3).text(); 
Questions connexes