freeburger: nicht "firstChild" sondern sämtliche Knoten ?

Hi, ich habe mal als Bsp das Script

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.

Beispiel:
 <span id="bebold">Diesen Text würde ich gerne dick haben.
 <i>auch diesen</i>, nicht zu vergessen auch das<u>hier</u></span>

Da ich es nach langem probieren immernoch nicht auf die Reihe bekommen habe, frage ich nun euch.
Reicht es wenn man "first.Child" durch einen anderen Objektnamen austauscht, und wenn ja, durch welchen?

thx schonmal alleine fürs durchlesen

greez freeburger

  1. 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

    1. Ja, das ist eine gute Idee,
      aber leider nicht sehr nützlich, wenn nicht alle Browser damit arbeiten können (bin zwar einer dieser Leute die es nicht leiden können, dass Surfer andere Browser verwenden als den IE, jedoch kommt man nicht weit wenn man IE only sites macht [www.kennst-mich.net is z.B. eine IE only ;) ])

      ich werde mal versuchen auf deiner Idee aufzubauen

      auf jeden Fall vielen vielen Dank :)

      1. Hallo,

        Ja, das ist eine gute Idee,
        aber leider nicht sehr nützlich, wenn nicht alle Browser damit arbeiten können ...

        Nun ja, dann ist allein die Verwendung von firstChild ein k.o.-Kriterium.

        MfG, Thomas

        1. Ja, das ist schade, damit muss man/ich vorerst leben ;(

          Hast du vieleicht sonst eine Idee wie ich das Prinzip

          Wenn
            die Buchstabenkombination "index" im Dokument enthalten ist;
           dann
            daraus einen Link machen

          Das einzige Problem stellt eben dar, dass ich es nicht schaffe das Dokument nach der Buchstabenkombination zu durchsuchen (ich bereuhe es schon fast das ich mich an java versuche :) )

          greez freeburger

          1. Hallo,

            Hast du vieleicht sonst eine Idee wie ich das Prinzip

            Wenn
              die Buchstabenkombination "index" im Dokument enthalten ist;
            dann
              daraus einen Link machen

            Auch mit DOM-Methoden: Textknoten suchen (wenn ...nodeValue.indexOf("index")!=-1, dann ist der Substring enthalten. Daraufhin mit ...createElement("A") / ...appendChild(...) einen neuen Anker einhaengen und ueber xyz=object.createAttribute("href") eine neue Linkreferenz erstellen und mit xyz.value("http://...") das Ziel zuweisen.

            Das DOM und seine Methoden sind schon sehr maechtig, allein die Browser sind es nicht (immer).

            MfG, Thomas

            1. respekt vor deiner JS-Kenntnis
              dein Beispiel is super, allerdings st0ße ich da ja wieder auf firstChild

              Mach dir jetzt keine Gedanken drüber, ic werde jetzt nochmal einige Tage überlegen wie ich das einfach umgehen kann, und falls ich es nicht schaffe, gehe ich zurück zu den Sprachen die ich behersche :))

              vielen Dank für deine Hilfe