Thomas Meinike: nicht "firstChild" sondern sämtliche Knoten ?

Beitrag lesen

Hallo,

var bebold = document.getElementById("inhalt").firstChild.data;
document.write(bebold.big());

genommen.
Nun möchte ich aber nicht,dass nur der erste Kindknoten angesprochen wird, sondern sämtliche sich im angesprochenem ID-Bereich Befindenden, sprich, dass bei diesem Beispiel jetzt sämtlicher Text dick geschrieben wird, ganz gleich in welchem Knoten er liegt.

Idee: Man sucht die Textknoten, fuegt darueber B-Elemente ein und setzt die Texte (nodeValues) als neue Textknoten zwischen <B>...</B> und entfernt die alten Textknoten. Mal ein Versuch:

HTML:

<p id="absatz">
  <span>Text</span>
  <span>Text</span>
  <span>Text</span>
</p>

Script:

function xyz()
{
var obj, anz, neu, txt;
obj=document.getElementById("absatz");
anz=obj.childNodes.length;

for(i=0;i<anz;i++)
{
 if(obj.childNodes.item(i).nodeType==3)
 {
    neu=document.createElement("B");
    txt=document.createTextNode(obj.childNodes.item(i-1).firstChild.nodeValue);
    obj.childNodes.item(i-1).appendChild(neu).appendChild(txt);
    obj.childNodes.item(i-1).firstChild.removeNode(false);
 }
}
}

(Script mal <body onload="xyz()"> aufrufen.)

IE 6 stellt danach 3x "Text" fett dar, was man auch mittels
alert(document.documentElement.outerHTML);
pruefen kann: <SPAN><B>Text</B></SPAN>
Mozilla 0.9.7 macht nichts und Opera 6 stuerzt gnadenlos ab ...

Geht vermutlich auch noch cleverer ;-).

MfG, Thomas