Comment utiliser getElementsByTagName() pour trouver tous les éléments imbriqués?
J'ai le code HTML suivant:
<html>
<head><title>Title</title></head>
<body>
<div id='div2'>
<a href='#'>1</a>
<div id='div1'>
<a href='#'>2</a>
</div>
</div>
</body>
</html>
... et le code Javascript suivant, je suis en cours d'exécution à travers Greasemonkey:
var nodes = document.body.getElementsByTagName('a');
for (var i = 0; i < nodes.length; i++) {
var node = nodes[i];
node.parentNode.removeChild(node);
}
Je m'attends à trouver et supprimer tous les tags; au lieu de cela, il trouve le premier, mais pas le second. Aussi loin que je peux dire c'est avoir de la difficulté avec la façon dont le deuxième est Une balise imbriquée.
Quelqu'un pourrait s'il vous plaît laissez-moi savoir comment faire pour supprimer toutes les balises, à l'aide de getElementsByTagName? Il y a des raisons, je préfère ne pas utiliser XPath si possible.
Il va probablement exiger la récursivité.
La documentation que j'ai lu dit: "La méthode getElementsByTagName recherches de manière récursive à travers tous les nœuds descendants du nœud actuel de la recherche pour les éléments de nœuds avec le nom spécifié." Donc, je m'attendais à faire la récursivité pour moi, ce qui m'amène à penser que je suis en train de faire une simple erreur.
La documentation que j'ai lu dit: "La méthode getElementsByTagName recherches de manière récursive à travers tous les nœuds descendants du nœud actuel de la recherche pour les éléments de nœuds avec le nom spécifié." Donc, je m'attendais à faire la récursivité pour moi, ce qui m'amène à penser que je suis en train de faire une simple erreur.
OriginalL'auteur Duncan Bayne | 2010-09-24
Vous devez vous connecter pour publier un commentaire.
De Capture de la longueur et retirer dans l'ordre inverse. Cela permettra d'éliminer les effets secondaires.
Mais une meilleure façon...
Ajouter cette directive à votre en-tête:
Ensuite l'ensemble de votre code devient:
OriginalL'auteur Brock Adams
Suivantes Vinay réponse:
Depuis à l'aide d'une boucle for, comme c'est bizarre si vous n'êtes pas fait usage de l'itérateur pour rien.
OriginalL'auteur Jamie Wong
L'erreur était de supprimer le nœud puis passez à l'élément suivant. La suppression de la première (#0), la seconde le 1er janvier.
OriginalL'auteur Macsek
modifier votre code pour
nœuds.longueur obtient évalué chaque fois que vous supprimez un enfant.
node.parentNode.removeChild(node)
fait retirer de la pile, contre tout juste de le nœud DOM?essayez de déboguer le script d'origine, vous comprendrez ce que je veux dire par réévaluée. pour y cela se produit, vous pouvez regarder dans n'importe quel article sur javascript meilleures pratiques pour l'explication.
OriginalL'auteur Vinay B R