Formatierten Text als Plaintext auslesen?
RedNifre
- javascript
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!
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
Hallo molily,
die Eigenschaft kannte ich noch nicht. Ich hatte wohl die falsche Suchstrategie. Daher habe ich das Rad mal wieder neu erfunden.
Gruß, Jürgen
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
Die Funktionsweise von textContent ist
... genau definiert, die von innerText ist nur dem augenscheinlichen Verhalten des IEs nachgebaut.
@@molily:
Hallo Gunnar™. ;-)
Live long and prosper,
Gunnar
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