Existe-t-il une version jQuery de cette fonction?
string strip_tags (string $ str [ string $ allowable_tags])
supprime toutes les balises et le contenu qu'ils contiennent d'une chaîne à l'exception de celles définies dans la chaîne de balises autorisées.
comme:
var stripped = strip_tags($('#text').html(), '<p><em><i><b><strong><code>');
de:
<div id="text">
<p> paragraph </p>
<div> should be stripped </div>
</div>
Pour supprimer uniquement les balises, et non le contenu, qui est le comportement de strip_tags()
de PHP, vous pouvez faire:
var whitelist = "p"; // for more tags use the multiple selector, e.g. "p, img"
$("#text *").not(whitelist).each(function() {
var content = $(this).contents();
$(this).replaceWith(content);
});
Pour supprimer toutes les balises, vous pouvez utiliser
$('<div>Content</div>').text()
Il suffit d'utiliser une expression régulière:
html.replace( /<.*?>/g, '' );
Terminé. :)
Pour la balise p
:
html.replace( /<[^p].*?>/g, '' );
Pour les autres tags, cela devient plus compliqué.
Cela a fonctionné pour moi:
function strip_tags(str) {
str = str.toString();
return str.replace(/<\/?[^>]+>/gi, '');
}
Pas une réponse réelle, mais un mot d'avertissement (selon ce que vous essayez de faire avec cela):
IMHO, dans presque tous cas, la désinfection des entrées doit être effectuée côté serveur (dans ce cas, en utilisant les fonctions natives PHP). Si votre intention est de remplacer PHP la fonctionnalité par la fonctionnalité côté client, je fortement le déconseille.
Pourquoi?
Ce n'est pas parce que vous créez un site Web que:
Encore une fois, pas vraiment répondre à votre question, mais un mot d'avertissement basé sur l'endroit où vous pourriez être dirigé en fonction de votre question :)
Pour supprimer toutes les balises, vous pouvez utiliser:
var StrippedString = OriginalString.replace(/(<([^>]+)>)/ig,"");
Code from: Strip HTML Tags in JavaScript
Utilisez ce qui suit pour enlever les balises tout en conservant le contenu
$('#text').find('p').contents().unwrap();
Cela supprimera la balise p
où p
est un élément enfant de '#text'.
Même s'il s'agit d'un vieux fil, je pense que cela pourrait être utile pour ceux qui cherchent encore une réponse.
La fonction Locutus.io semble être la meilleure solution:
function strip_tags (input, allowed) {
allowed = (((allowed || '') + '').toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join('')
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi
var commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi
return input.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) {
return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : ''
})
}
Exemple 1:
strip_tags('<p>Kevin</p> <br /><b>van</b> <i>Zonneveld</i>', '<i><b>')
renvoie 1: 'Kevin <b>van</b> <i>Zonneveld</i>'
Exemple 2:
strip_tags('<p>Kevin <img src="someimage.png" onmouseover="someFunction()">van <i>Zonneveld</i></p>', '<p>')
renvoie 2: '<p>Kevin van Zonneveld</p>'
Exemple 3:
strip_tags("<a href='http://kvz.io'>Kevin van Zonneveld</a>", "<a>")
renvoie 3: "<a href='http://kvz.io'>Kevin van Zonneveld</a>"
Exemple 4:
strip_tags('1 < 5 5 > 1')
renvoie 4: '1 < 5 5 > 1'
Exemple 5:
strip_tags('1 <br/> 1')
renvoie 5: '1 1'
Exemple 6:
strip_tags('1 <br/> 1', '<br>')
renvoie 6: '1 <br/> 1'
Exemple 7:
strip_tags('1 <br/> 1', '<br><br/>')
renvoie 7: '1 <br/> 1'
Vous pouvez essayer ceci, probablement la meilleure solution: http://phpjs.org/functions/strip_tags/