2012-08-10 9 views
15

Erste ein Element des DOM wie diesesjquery text(), interpretieren <br> als neue Linie

$('#id').content().text(); 

Problem tritt bei

Wenn es diese bekommt:

<p>Hello</p> 
<p><br></p> 
<p>World</p> 

natürlich in Html sieht so aus:

Hello 

World 

Aber diese jquery .text() Methode gibt zurück: HelloWorld

Wie <br> als neue Zeile zu interpretieren? < -> Wie bekomme ich den Text genau so, wie ich es in HTML sehe?

.html() gibt alle HTML-Tags, die ich nicht möchte. Ich brauche nur den Klartext mit Leerzeichen, wenn möglich.

Antwort

20

.text() ist einfacher Text ohne Formatierung. Es ist buchstäblich die Verkettung der Textknoten ohne andere HTML-Codes (einschließlich neuer Zeilen, die durch <br> oder <p> Tags, nicht durch Zeilenumbrüche dargestellt werden).

.html() ist das genaue HTML eines Container-Tags.

Wenn Sie diese verwenden, wird es Ihnen eine Annäherung an Ihren Text mit neuen Linien erhalten:

var item = document.getElementById("id"); 
var text = item.innerText || item.textContent; 

Es ist sowohl bei .textContent und .innerText aufgrund Browser Kompatibilitätsprobleme suchen.

Eine funktionierende Demo finden Sie unter http://jsfiddle.net/jfriend00/Xs5P3/.

Eine Google-Suche nach "HTML zu Textkonvertierung" bietet viele Optionen zu untersuchen.

+0

Gibt es eine einfache Möglichkeit, das zu tun? (Eliminiere alle HTML-Tags außer Newline) – jacktrades

+0

@jacktrades - Ich habe meiner Antwort eine Option hinzugefügt, die zu funktionieren scheint. – jfriend00

+0

Beachten Sie, dass innerText oder textContent
Tags nicht als Zeilenumbrüche interpretiert. Diese Geige zeigt Zeilenumbrüche, weil es in diesem div echte Zeilenumbrüche gibt. Entfernen Sie die Zeilenumbrüche in der Fiddles-HTML-Quelle, und die Ergebnisse entsprechen nicht Ihren Erwartungen. – eferrari