RedNifre: Formatierten Text als Plaintext auslesen?

Hallo,

Ich möchte aus einem Knoten den Text als String auslesen. Wenn der Knoten nur Text enthält ist das kein Problem, aber was mache ich mit so was?:

"Das ist <b>nicht</b> gut!"

Das Problem ist das der Knoten jetzt drei Unterknoten hat: Einen Text, einen <b>-Knoten und noch einen Text, also so etwa:

[Das ist]
[<b>]
[gut!]

Gibt es eine tolle Funktion, die einen Knoten als Parameter nimmt und einen String zurückliefert, wobei alles bis zum "Grund" aufgelöst wird, egal wie tief der Text verschachtelt ist?
Falls nicht: Habt ihr Tipps wie ich so eine Funktion schreiben könnte?

Vielen Dank!

  1. Hallo,

    Gibt es eine tolle Funktion, die einen Knoten als Parameter nimmt und einen String zurückliefert

    Es gibt die Elementobjekt-Eigenschaften http://de.selfhtml.org/javascript/objekte/all.htm#inner_text@title=innerText (IE und viele andere Browser außer Gecko) und textContent (nur Gecko).

    var textinhalt = element.innerText || element.textContent;

    Mathias

    1. Hallo molily,

      element.textContent;

      die Eigenschaft kannte ich noch nicht. Ich hatte wohl die falsche Suchstrategie. Daher habe ich das Rad mal wieder neu erfunden.

      Gruß, Jürgen

    2. Es gibt die Elementobjekt-Eigenschaften http://de.selfhtml.org/javascript/objekte/all.htm#inner_text@title=innerText (IE und viele andere Browser außer Gecko) und textContent (nur Gecko).

      Äh, das ist missverständlich: Gecko versteht nur diese Eigenschaft, nicht innerText. Aber einige andere Browser verstehen auch textContent. textContent ist in DOM 3 Core standardisiert, wenn man also Lust hat, fragt man erst die standardisierte, dann die proprietäre Eigenschaft ab.

      var textinhalt = element.textContent || element.innerText;

      Die Funktionsweise von textContent ist

      Mathias

      1. Die Funktionsweise von textContent ist

        ... genau definiert, die von innerText ist nur dem augenscheinlichen Verhalten des IEs nachgebaut.

        1. @@molily:

          Hallo Gunnar™. ;-)

          Live long and prosper,
          Gunnar

          --
          Erwebsregel 208: Manchmal ist das einzige, was gefährlicher als eine Frage ist, eine Antwort.
  2. Hallo RedNifre,

    du musst dich durch alle Knoten und Kindsknoten durchhangeln, prüfen, ob es ein Textknoten ist, und dann die Texte einsammeln. Dabei musst du auf Leerzeichen achten. Ich habe da mal etwas gebastelt:

    var JB_elementText = function(elem) {  
     var eT = function(ele) {  
      var uele=ele.firstChild;  
      while(uele) {  
       if(uele.hasChildNodes()) eT(uele);  
       if(uele.nodeType == 1) Text += " ";  
       else if(uele.nodeType == 3) Text += uele.data;  
       uele = uele.nextSibling;  
      }  
     }  
     var Text="";  
     eT(elem);  
     return Text.replace(/\s+/g," ");  
    }
    

    Gruß, Jürgen