J’ai une variable qui contient une chaîne de texte et des balises HTML, telles que:
var temp = "Some textMore texthere
Even more
";
Je voudrais supprimer toutes les balises d’un certain type. Disons toutes les balises p
et span
par exemple.
C’est le meilleur que je puisse trouver:
var temp = "Some textMore texthere
Even more
"; var $temp = $(temp); $("p", $temp).replaceWith("foo"); alert($temp.html()); //returns "Some text"
La réponse la plus proche que j’ai pu trouver est cette réponse de Nick Craver: dénudez les balises span de ssortingng avec jquery .
Démo: http://jsfiddle.net/VwTHF/1/
$('span, p').contents().unwrap();
.contents()
obtiendra les éléments et le texte contenus dans chacune de ces balises, et .unwrap
supprimera l’élément qui .unwrap
chaque section de contenu.
Selon votre approche actuelle, cela ressemblerait à ceci:
var temp = "Some textMore texthere
Even more
"; var $temp = $(temp); $temp.find('span, p').contents().unwrap().end().end();
Si vous souhaitez continuer à cibler l’object d’origine, vous devez utiliser .end()
pour effacer le filtre.
Vous pouvez essayer le plugin jquery HTML Clean . Dans l’exemple, ils fournissent:
$.htmlClean("Nested P Test
", {format:true}); => Nested P Test
Vous pouvez remplacer des balises spécifiques par {removeTags:[p]}
et restituera le contenu mais pas la balise.
Je devais faire quelque chose de similaire: empêcher un bloc de texte de contenir une balise HTML autre que ,
ou
. Cette question et plusieurs autres m’ont orientée vers ma propre fonction:
function cleanNonFormattingTags(htmlContents) { if (htmlContents && htmlContents.length) { var result = ''; htmlContents.each(function () { var $child = $(this), type = $child.prop('tagName'), isTextNode = this.nodeName == "#text"; if (isTextNode) { result += this.textContent; } else if (type == 'B' || type == 'U' || type == 'I' || type == 'BR') { // Allow only these types of tags var innerContent = cleanNonFormattingTags($child.contents()); var $newTag = $(document.createElement(type)).html(innerContent); result += $newTag[0].outerHTML; } else { result += cleanNonFormattingTags($child.contents()); } }); return result; } return htmlContents.text(); }
J’espère que cela t’aides!
Je ferai un suivi sur @nbrooks car sa réponse est très proche de ce que vous voulez, mais pas tout à fait. @nbrooks a choisi la solution en notant que html () vous donne les données encapsulées dans une balise. La solution consiste donc à envelopper votre code HTML dans une balise. Cela devrait faire l’affaire pour vous:
var temp = "Some textMore texthere
Even more
"; $("" + temp + "").find('span,p'). contents().unwrap().end().end().html()`
Voir http://jsfiddle.net/18u5Ld9g/1/ pour un exemple.
En tant que fonction plus générale:
function ssortingpTags(html, tags) { // Tags must be given in CSS selector format return $("" + html + "").find(tags). contents().unwrap().end().end().html(); }