196 votes

Javascript: comment parcourir TOUS les éléments DOM d'une page?

J'essaie de boucler sur TOUS les éléments d'une page. Je souhaite donc vérifier chaque élément de cette page pour une classe spéciale.

Alors, comment dire que je veux vérifier CHAQUE élément?

301voto

Andy E Points 132925

Vous pouvez passer une * de getElementsByTagName() , de sorte qu'il sera de retour tous les éléments dans une page:

var all = document.getElementsByTagName("*");

for (var i=0, max=all.length; i < max; i++) {
     // Do something with the element here
}

Notez que vous pouvez utiliser querySelectorAll(), si elle est disponible, il suffit de trouver les éléments avec une classe particulière.

if (document.querySelectorAll)
    var clsElements = document.querySelectorAll(".mySpeshalClass");
else
    // loop through all elements instead

Ce serait certainement accélérer les choses pour les navigateurs modernes.

47voto

traditional Points 128

Je cherchais pareil. Eh bien, pas exactement. Je voulais seulement lister tous les nœuds DOM.

 var currentNode,
    ni = document.createNodeIterator(document.documentElement, NodeFilter.SHOW_ELEMENT);

while(currentNode = ni.nextNode()) {
    console.log(currentNode.nodeName);
}
 

Pour obtenir des éléments avec une classe spécifique, nous pouvons utiliser la fonction de filtrage.

 var currentNode,
    ni = document.createNodeIterator(
                     document.documentElement, 
                     NodeFilter.SHOW_ELEMENT,
                     function(node){
                         return node.classList.contains('toggleable') ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
                     }
         );

while(currentNode = ni.nextNode()) {
    console.log(currentNode.nodeName);
}
 

Solution trouvée sur MDN

10voto

Juggernogger93 Points 39

Hear est un autre exemple de la manière dont vous pouvez parcourir un document ou un élément //

 function getNodeList(elem){
var l=new Array(elem),c=1,ret=new Array();
//This first loop will loop until the count var is stable//
for(var r=0;r<c;r++){
    //This loop will loop thru the child element list//
    for(var z=0;z<l[r].childNodes.length;z++){

         //Push the element to the return array.
        ret.push(l[r].childNodes[z]);

        if(l[r].childNodes[z].childNodes[0]){
            l.push(l[r].childNodes[z]);c++;
        }//IF           
    }//FOR
}//FOR
return ret;
}
 

2voto

shareef Points 1482

de ce lien
référence javascript

 <html>
<head>
<title>A Simple Page</title>
<script language="JavaScript">
<!--
function findhead1()
{
    var tag, tags;
    // or you can use var allElem=document.all; and loop on it
    tags = "The tags in the page are:"
    for(i = 0; i < document.all.length; i++)
    {
        tag = document.all(i).tagName;
        tags = tags + "\r" + tag;
    }
    document.write(tags);
}

//  -->
</script>
</head>
<body onload="findhead1()">
<h1>Heading One</h1>
</body>
</html>
 

MISE À JOUR: EDIT

depuis ma dernière réponse, j'ai trouvé une solution plus simple et meilleure

 function search(tableEvent)
    {
        clearResults()

        document.getElementById('loading').style.display = 'block';

        var params = 'formAction=SearchStocks';

        var elemArray = document.mainForm.elements;
        for (var i = 0; i < elemArray.length;i++)
        {
            var element = elemArray[i];

            var elementName= element.name;
            if(elementName=='formAction')
                continue;
            params += '&' + elementName+'='+ encodeURIComponent(element.value);

        }

        params += '&tableEvent=' + tableEvent;


        createXmlHttpObject();

        sendRequestPost(http_request,'Controller',false,params);

        prepareUpdateTableContents();//function js to handle the response out of scope for this question

    }
 

-1voto

Jimish Gamit Points 19

Vous pouvez essayer avec document.getElementByClass('special_class');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X