Partage
  • Partager sur Facebook
  • Partager sur Twitter

regex sur page html

trouver et remplacer un morceau de code

Sujet résolu
    23 janvier 2009 à 1:07:51

    Salut les ZerOs,

    Je voudrais trouver et remplacer (supprimer) automatiquement un bout de code du genre :

    <div class="itemChampBloc">
    <div class="itemChampTitre"></div>
    </div>

    le tout en javascript et sans identifier les elements par "id" ou "name" : en laissant le code de base tel quel

    Je suppose que la solution est du coté des regex mais comment faire pour scanner toute une page et pour remplacer toutes les occurences ?

    Merci,

    A+
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      23 janvier 2009 à 1:12:19

      d'oh! le DOM se limite pas à id et à name!

      document.getElementsByTagName()
      document.getElementsByClassName() (tu peux émuler pour ie6)

      et bien sur
      element.nextSibling
      element.childNodes (element.firstChild, element.lastChild)

      cherches un peu, les regex c'est pas la solution. Dutout.
      • Partager sur Facebook
      • Partager sur Twitter
        23 janvier 2009 à 1:20:16

        le problème c'est que j'ai d'autres éléments de même classe que je ne veux pas changer alors "document.getElementsByClassName()" ne peut pas marcher.
        Mais le reste peut être, je vais voir. Si tu peux me donner plus d'explications n'hésite surtout pas. Pour le :"cherches un peu" t'es gentil, j'ai déjà chercher.
        Merci. A+
        • Partager sur Facebook
        • Partager sur Twitter
          23 janvier 2009 à 1:30:09

          En combinant le getElementsByClassName (ou encore tagName) avec du parcourt DOM, tu peux vérifier toutes les conditions que tu veux.
          Tu peux par exemple rechercher tous les éléments dont la class est itemChampBloc, puis regarder lesquels sont suivis d'un élément de class itemChampTitre.
          Il y a quelques explications sur des fonctions utiles (nextSibbling et cie) sur cette page : http://fr.selfhtml.org/javascript/objets/node.htm
          • Partager sur Facebook
          • Partager sur Twitter
            23 janvier 2009 à 14:33:32

            Salut,

            J'ai essayé dans un premier temps avec ça :

            <script language="Javascript">
            <!--
            	function supr(){
            	
            		var i = 0;
            		var i2 = 0;
            		
            		while (i<=300)
            		{		
            		
            			var div = document.getElementsByTagName("div")[i];
            			var attributDiv = div.getAttributeNode("class");
            					
            			if(attributDiv == "itemChampTitre")
            			{																    	
            				document.write("</br></br>Le nombre d'enfant de l'élément de classe itemChampTitre  n° " + i2 + " est <b>" + div.childNodes.length + "<\/b><br>");
            				i2++;				
            			}
            						
            			i++;
            		}
            				
            	}
            //-->	
            </script>
            


            Mais il me met :que la valeur attributDiv n'est pas définie.

            Quand je ne cherche qu'une occurence de atributDiv ex:document.getElementsByTagName("div")[0]; ça marche.

            Comment travailler avec toutes les occurences de atributDiv ?

            Merci
            • Partager sur Facebook
            • Partager sur Twitter
              23 janvier 2009 à 18:06:29

              Déjà une chose, tu peux simplifier cette ligne :
              var attributDiv = div.getAttributeNode("class");
              

              Tu peux récupérer l'attribut "class" via className :
              var attributDiv = div.className;
              


              Mais passons maintenant au problème qui importe : comment utiliser le retour de getElementsByTagName : il s'agit d'un tableau, tu dois donc le parcourir :
              var divs = document.getElementsByTagName('div'); //Liste de toutes les div
              for(var i=0; i<divs.length; i++){ //On parcour tous les éléments du tableau
              	//Code à exécuter pour chaque élément
              	var attributDiv = divs[i].className;
              	if(attributDiv == 'itemChampTitre'){
              		//...
              	}
              }
              
              • Partager sur Facebook
              • Partager sur Twitter
                26 janvier 2009 à 9:42:05

                Salut, et grand merci Elias.
                Par contre j'ai testé ça ce weekend et j'ai encore un problème:
                J'ai créé une sorte de sortie standard avec ".appendData" pour vérifier les résultats du script et je ne comprend pas pourquoi je n'arrive à afficher la classe "intenChampsTitre" qu'une seule fois alors qu'elle apparait plusieurs fois dans mon code avec la même structure a chaque fois:

                function supr()	
                	{		
                		var divs = document.getElementsByTagName('div'); //Tableau de tous les div
                		var i2 = 1;	//Compteur de div de classe itemChampTitre	
                						
                		for(var i=0; i<divs.length; i++) //On parcour tous les éléments du tableau
                		{ 
                			var classDiv = divs[i].className; //On regarde la classe du div
                								
                			if(classDiv == 'itemChampBloc') //On test si cette classe est : itemChampBloc
                			{	
                				document.getElementById("sortie").firstChild.appendData(" | "+divs[i].childNodes[1].firstChild.data);
                				document.getElementById("sortie").firstChild.appendData(" | "+i);
                			}
                		}		
                
                	}
                


                Grosso modo je voudrais savoir comment finaliser le script pour mettre en "display: none" le div de class "itemChampBloc" qui contient un div de class "intenChampsTitre" "vide" (sans data entre ses balises)
                A+
                • Partager sur Facebook
                • Partager sur Twitter

                regex sur page html

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown