2011-10-25 6 views
22

è possibile utilizzare la funzione jquery text() per rimuovere tutto il codice HTML in una stringa?Rimuovere tutti i tag HTML in una stringa (con la funzione jquery text())

String con tag HTML:
myContent = '<div id="test">Hello <span>world!</span></div>';


il risultato deve essere:
Hello world!

+1

possibile duplicato del [Striscia HTML dal testo JavaScript] (http://stackoverflow.com/questions/822452/strip-html-from-text-javascript) – Clive

risposta

67
var myContent = '<div id="test">Hello <span>world!</span></div>'; 

alert($(myContent).text()); 

che si traduce in ciao mondo. Questo risponde alla tua domanda?

http://jsfiddle.net/D2tEf/ per un esempio

+0

O per dirla in un altro modo, per qualsiasi stringa valore di x, $ ('' + x + '') .text() == x viene sempre valutato come true. – Jazz

+0

In realtà non è vero, se la stringa contiene html. – HarryFink

+0

Ancora funziona. soluzione semplice –

7

Potresti non solo try it?

myContent = '<div id="test">Hello <span>world!</span></div>'; 
console.log($(myContent).text()); //Prints "Hello world!" 

Nota che è necessario avvolgere la stringa in un oggetto jQuery, altrimenti non avrà un metodo text ovviamente.

20

Ho creato questo test case: http://jsfiddle.net/ccQnK/1/, ho utilizzato la funzione di sostituzione Javascript con espressioni regolari per ottenere i risultati desiderati.

$(document).ready(function() { 
    var myContent = '<div id="test">Hello <span>world!</span></div>'; 
    alert(myContent.replace(/(<([^>]+)>)/ig,"")); 
}); 
+2

Dovresti sempre postare la soluzione attuale qui, non solo in jsfiddle o in un sito simile. Non c'è alcuna garanzia che l'altro sito sarà in giro in futuro. – Blazemonger

+0

da jsfiddle myContent.replace (/ (<([^>] +)>)/ig, "") – sherif

+0

Non è un grande fan delle soluzioni regex. Possono quasi sempre essere infranti. –

9

Se è necessario rimuovere il codice HTML, ma non sa se contiene in realtà nessun tag HTML, non è possibile utilizzare il metodo di jQuery direttamente perché restituisce involucro vuoto per il testo non HTML.

$('<div>Hello world</div>').text(); //returns "Hello world" 
$('Hello world').text(); //returns empty string "" 

È necessario sia avvolgere il testo in HTML valido:

$('<div>' + 'Hello world' + '</div>').text(); 

O uso metodo $ .parseHTML() (dal jQuery 1.8) in grado di gestire sia HTML e non HTML testo:

var html = $.parseHTML('Hello world'); //parseHTML return HTMLCollection 
var text = $(html).text(); //use $() to get .text() method 

Plus parseHTML rimuove completamente i tag di script che è utile come protezione anti-hacking per gli input dell'utente.

$('<p>Hello world</p><script>console.log(document.cookie)</script>').text(); 
//returns "Hello worldconsole.log(document.cookie)" 

$($.parseHTML('<p>Hello world</p><script>console.log(document.cookie)</script>')).text(); 
//returns "Hello world" 
3

Un'alternativa:

$("<p>").html(myContent).text(); 
0

ho trovato nel mio caso specifico che ho solo bisogno di tagliare il contenuto. Forse non la risposta posta nella domanda. Ma ho pensato di aggiungere comunque questa risposta.

$(myContent).text().trim() 
Problemi correlati