Cybaer: alle ids einer seite auslesen

Beitrag lesen

Hi,

Hat jemand Lust, die Funktion zusammenzufassen und einen Kurzartikel daraus zu machen? Muß nicht lang sein, nur endgültige, in den meisten Browsern funktionierende Funktion und Erklärung. Würde sich doch anbieten.

Hier erstmal mein letzter Stand für alle DOM-Level-2-Browser mit Kommentaren. Auf jeden Fall erscheint es mir noch sinnvoll, die Ermittlung des Startobjekts noch in der Funktion selber zu erledigen (also ggf. ID übergeben, und damit das Startobjekt ermitteln), anstatt ein Objekt selbst zu übergeben. Ob noch die proprietäre all-Variante reinkommt: mal sehen. Wenn ja, dann auch noch die "*"-Variante. Letztere kann zwar nichts "mehr", dürfte aber prinzipiell schneller sein, als eine JS-Rekursion.

  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  
<html>  
<head>  
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">  
<title>Ermittle Attribut-Werte</title>  
<script type="text/javascript"><!--  
// Alle IDs ermitteln 050414  
function getAttributeValues(attribName,startObj) {  
 // Lokale Variablen, attribute ist FALSE  
 var recursive, attribute=false;  
 // Funktion ueberhaupt moeglich?  
 if(attribName && document.getElementById) {  
  // Ist der ggf. uebergebene Parameter ein Objekt? Existiert es? Hat es einen Node-Namen? Wenn nicht: Das ganze Dokument  
  startObj=(typeof(startObj)=="object" && startObj && startObj.nodeType==1)?startObj:document.getElementsByTagName("body")[0];  
  // Rekursive Funktion fuer den DOM-Baum definieren  
  recursive=function(attribName,obj) {  
   // Durch den Baum hangeln  
   for(var i=obj.firstChild; i!=null; i=i.nextSibling) {  
    // Wenn Objekt ein Elementknoten ...  
    if(i.nodeType==1) {  
     // ... Attribut auslesen ...  
     attribValue=i.getAttribute(attribName);  
     // ... und sichern, falls es das Attribut gab und einen Wert hatte  
     if(attribValue) { attribute[attribute.length]=attribValue; }  
     // Weiter geht's  
     recursive(attribName,i);  
    }  
   }  
  }  
  // Start der Suche, falls der Browser firstChild kennt  
  if(startObj.firstChild) {  
   // attribute als Array definieren  
   attribute=new Array();  
   // Los geht's  
   recursive(attribName,startObj);  
  }  
 }  
 // Rueckgabe des Arrays oder von FALSE, falls der Browser zu alt ist  
 return attribute;  
}  
  
// Array per DHTML ausgeben 050414  
function dumpArray(array,id) {  
 // Ist die Ausgabe moeglich, existiert der Ausgabebereich und hat das Array Inhalt?  
 if(document.getElementById && document.getElementById(id) && array.length) {  
  // Lokale Variablen, dump mit Listen-Tag vordefinieren  
  var i, dump="<ol>";  
  // Array durchlaufen und dump ergaenzen  
  for(i=0;i<array.length;i++) { dump+="<li>"+array[i]+"<\/li>"; }  
  // Abschluss mit dem Tag-Ende  
  dump+="<\/ol>";  
  // Liste in das Dokument schreiben  
  document.getElementById(id).innerHTML=dump;  
 }  
}  
  
//--></script>  
</head>  
  
<body onload="dumpArray(getAttributeValues('id'),'output');">  
  
<div id="ID1"><span id="nextID">IDs</span>:  
  
<div id="output"></div>  
</div>  
  
<div id="lastID"></div>  
  
</body>  
</html>  

Gruß, Cybaer

--
Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!