Comment puis-je mettre de la liste non ordonnée d'éléments dans un tableau
Mon code est...
Comment puis-je obtenir le texte de chaque élément de la liste dans un tableau à l'aide de javascript natif?
<ul id="list">
<li>List Item 1</li>
<li>List Item 2</li>
<li>List Item 3</li>
<li>List Item 4</li>
</ul>
<script type="text/javascript">
var list = document.getElementById('list').childNodes.TextNode;
for(var i=0;i < list.length; i++) {
var arrValue = list[i];
alert(arrValue);
}
</script>
Merci beaucoup.
OriginalL'auteur | 2010-05-08
Vous devez vous connecter pour publier un commentaire.
Sauf si vous souhaitez que le texte-nœuds entre chaque
<li>
ce n'est pas une bonne idée d'utiliserchildNodes
. Quel est le problème avecgetElementsByTagName('li')
?getElementsByTagName
est naturellement hiérarchique. Pourquoi ne pas simplementmap(listItems, getText)
, si?changé à
map(listItems, getText)
. Merci!OriginalL'auteur James
Essayez ceci:
getElementsByTagName('li')
?childNodes
contient des espaces nœuds de Texte, pour lequelinnerHTML
n'est pas défini.innerHTML
sera de retour les caractères échappés du texte.OriginalL'auteur nickf
Juste au sujet de tout Bibliothèque Javascript (Prototype, jQuery, Fermeture, ...) rendra plus facile, mais si vous voulez le faire vous-même:
Vous êtes proche de votre Javascript doit ressembler à quelque chose comme ceci:
Explication:
document.getElementById
, vous devez être sûr que le DOM est prêt pour vous de le faire. C'est certainement prêt àonload
temps, et il existe plusieurs mécanismes de déclenchement de votre code un peu plus tôt que cela, si vous le souhaitez (y compris de mettre le script à la fin).ul#list
élément du premier enfant, puis se poursuit tant qu'il y a d'autres frères et sœurs.nodeType == 1
) et que son nom de la balise est "LI".J'ai utilisé
innerHTML
pour récupérer le contenu de la LIs parce que c'est largement pris en charge. Alternativement, vous pouvez utiliserinnerText
sur IE (et quelques autres) ettextContent
sur Firefox, mais attention, ils ne le font pas assez la même chose (textContent
sur Firefox inclure le contenu descript
balises, par exemple, qui n'est probablement pas ce que vous voulez).getElementsByTagName('li')
?C'est certainement une option, c'est une boucle de toute façon, à l'aide de
getElementsByTagName
a besoin d'un second appel de la fonction et de la création d'une NodeList, qui semble unnecesary si vous allez à la boucle de toute façon. (Est-ce que votre downvote? Si si, semble un peu dur, juste pour aller d'une manière différente...)OriginalL'auteur T.J. Crowder
Et comme toujours, la manière la plus simple à l'aide de jQuery:
childNodes
contient des espaces nœuds de Texte qui sont non désirés dans la liste (et pour quiinnerText
n'est pas défini).||
test échoue pour vide-chaîneinnerText
, laissant à-dire à mettreundefined
dans la gamme.Avec jQuery même de plus simple:
var list = $('#list li').map(function(){return $.text([this])});
OriginalL'auteur Vincent Robert
var liste = document.getElementsByTagName('ul')[0].getElementsByTagName('li');
OriginalL'auteur pixel 67