web-dev-qa-db-fra.com

Supprimer tous les balises HTML dans une chaîne (avec la fonction jquery text ())

est-il possible d'utiliser la fonction jquery text () pour supprimer tout le code HTML d'une chaîne?

Chaîne avec balises HTML:
myContent = '<div id="test">Hello <span>world!</span></div>';


Le résultat doit être:
Hello world!

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

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

Cela se traduit par bonjour le monde. Est-ce que ça répond à votre question?

http://jsfiddle.net/D2tEf/ pour un exemple

80
Ross Dargan

J'ai créé ce cas de test: http://jsfiddle.net/ccQnK/1/ , j'ai utilisé la fonction de remplacement Javascript avec des expressions régulières pour obtenir les résultats souhaités.

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

Si vous devez supprimer le code HTML sans savoir s'il contient réellement des balises HTML, vous ne pouvez pas utiliser directement la méthode jQuery car elle renvoie un wrapper vide pour du texte non HTML.

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

Vous devez soit envelopper le texte en HTML valide:

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

Ou utilisez la méthode $ .parseHTML () (depuis jQuery 1.8) qui peut gérer les textes HTML et non HTML:

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

De plus, parseHTML supprime complètement les balises de script, ce qui est utile comme protection anti-piratage pour les entrées utilisateur.

$('<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"
11
Radek Pech

Ne pourriez-vous pas simplement l'essayer ?

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

Notez que vous devez envelopper la chaîne dans un objet jQuery, sinon il n'aura évidemment pas de méthode text.

7
James Allardice

Une alternative:

 $("<p>").html(myContent).text();
5
Hemerson Varela

J'ai trouvé dans mon cas spécifique que je devais juste couper le contenu. Peut-être pas la réponse à la question. Mais je pensais que je devrais ajouter cette réponse de toute façon.

$(myContent).text().trim()
0
Danny van Holten