11545 sujets

JavaScript, DOM et API Web HTML5

Salut à tous !

est-ce que vous seriez comment faire pour parcourir tous les objects d'un document HTML sous Mozilla / Firefox ?

Avec Internet Explorer c'est plutot simple :
		// On parcours tous les objets du document
		var AllObjects = document.all ;
		for (var z = 0; z < AllObjects.length; z++) {
			alert(AllObjects[z].tagName);
		}



Mais sous Mozilla quel est l'équivalent de document.all ?

Si il n'y a pas d'équivalent pour Moz, cela serait faisable avec une boucle récursive qui trouve tous les enfants grace à childNodes en faisant un truc du genre :

		AllChilds = document.body.childNodes ;
		alert(AllChilds.length);
		 
			for (var z = 0; z < AllChilds.length; z++) {
			 
				alert(AllChilds[z].tagName) ;
			 
			}
		


Mais Mozilla retourne également les nodes #text et j'ai peur que cette méthode soit trop lourde avec des pages à fort contenu ...

Donc la question en résumé est : y a t'il un équivalent au document.all de IE pour Mozilla / Firefox ?

Merci d'avance pour votre aide Smiley cligne
Modifié par AntiStatic (13 Jul 2005 - 10:05)
Pour les deux navigateurs tu peux utiliser document.getElementsByTagname('*') ... mais pour peu que la page soit assez fournis ca peut ralentir le navigateur quelques secondes.
Salut,

Voila je debarque dans le javascript et j'ai beaucoup de probleme d'identification d'objets, d'autant que entre IE et FF le DOM ne marche pas pareil. J'ai donc essayer ce petit script mais j'ai pas reussi à adapter le document.getElementsByTagname('*') pour faire afficher les objets. Quelqu'un pourrait-il donner le script complet svg??

Merci

Edit: En fait ce que je voudrai c'est parcourir en faisant un getElementById et ca c amarche pas
Modifié par gussoner (16 May 2006 - 13:15)
ce script est peut-être utile dans ce cas;

à tester et à adapter, bien sûr:


<script type="text/javascript">

var tags, ch, ch2, mono, mono2, r, cadre, d;
var l=0;

window.onload=function(){
	document.getElementById("b").onclick=function(){
		structure(document.body,this)
	}
}

function structure(n,arch){

	tags=[];
	ch=n.getElementsByTagName('*');

	for(j=2;j!=ch.length;j++){
		ch2=ch[j];
		r=-3;
		while(ch2.parentNode){
			ch2=ch2.parentNode;
			r++;
			if(r>=l){
				l=r
			}
		}

	tags.push("l"+(r*60+5)+"<"+ch[j].tagName.toLowerCase()+">");
	tags.push(ch[j].getElementsByTagName('*').length)
	}


	for(j=0;j!=tags.length;j++){

		if(isFinite(tags[j])){
			tags.splice(2*tags[j]+j+1,0,tags[j-1].replace('<','</'))
		}

		mono=/\/(br|input|img|hr)\>/g;
		if(isFinite(tags[j]) || tags[j].search(mono)!=-1){
			tags.splice(j,1,"")
		}
	}

	for(j=0;j!=tags.length;j++){
		if(tags[j+2]==tags[j].replace('<','<\/')){
			tags[j]+=tags[j+2];
			tags[j]=tags[j].replace('\n','');
			tags.splice(j+2,1,"")
		}

		mono2=/\<(br|input|img|hr)\>/;
		tags[j]=tags[j].replace(mono2,"<$1 />");
		if(tags[j].split('<').length>2){
			tags[j]=tags[j].replace(/\>l\d+/,"> ")
		}
	}

	cadre=document.createElement('p');
	cadre.style.cssText="margin-left:auto;margin-right:auto;text-align:left;font-weight:bold;border:solid #ff0000 2px;background-color:#ffff00;width:"+(l*60+100)+"px";
	cadre.title="Cliquez pour m'effacer";
	cadre.onclick=function(){
		ch[0].replaceChild(arch,this)
	}

	for(j=0;j!=tags.length;j++){
		if(tags[j]!=""){
			d=document.createElement('div');
			d.style.marginLeft=tags[j].replace(/[^\d]+/g,"")+"px";
			d.appendChild(document.createTextNode(tags[j].substring(tags[j].indexOf('<'))));
			cadre.appendChild(d)
		}
	}

	ch[0].replaceChild(cadre,arch)
}

</script>

</head>

<body>
<div style="text-align:center"> 
<input type="button" id="b" value="voir la structure du document" />
</div>


==> Le div doit être le premier du document;
==> toutes les balises suivantes seront traitées;
Attention: je n'ai jamais essayé sur du html mal imbriqué!