我有一个包含一串text和html标签的变量,例如:
var temp = "<div>Some text</div><p>More text<span>here</span></p><p>Even more</p>";
我想删除某种类型的所有标签。我们可以说所有p
和span
代码。
这是我能想到的最好的:
var temp = "<div>Some text</div><p>More text<span>here</span></p><p>Even more</p>";
var $temp = $(temp);
$("p", $temp).replaceWith("foo");
alert($temp.html()); //returns "Some text"
我能找到的最接近的答案是Nick Craver的回答:strip span tags from string with jquery。
答案 0 :(得分:13)
演示:http://jsfiddle.net/VwTHF/1/
$('span, p').contents().unwrap();
.contents()
将获取每个此类标记中的元素和文本,.unwrap
将删除包装每个内容部分的元素。
根据您当前的方法,它看起来像这样:
var temp = "<div>Some text</div><p>More text<span>here</span></p><p>Even more</p>";
var $temp = $(temp);
$temp.find('span, p').contents().unwrap().end().end();
如果您想继续定位原始对象,则必须使用.end()
清除过滤器。
答案 1 :(得分:2)
您可以尝试jquery plugin HTML Clean。在他们提供的示例中:
$.htmlClean("<H1 class=\"header\"><P>Nested P Test</H1>", {format:true});
=>
<h1>
Nested P Test
</h1>
您可以使用{removeTags:[p]}
替换特定代码,但仍然会将内容呈现为不是代码。
答案 2 :(得分:0)
我必须做类似的事情:保留一段文字,使其不包含<b>
,<i>
或<u>
以外的任何HTML标记。这个问题和其他几个问题指出了我自己的职责:
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();
}
希望这有帮助!
答案 3 :(得分:0)
我会跟进@nbrooks,因为他的答案非常接近你想要的,但并不完全。 @nbrooks注意到解决方案,注意到html()为你提供了包含在标签中的数据。因此,解决方案是将HTML包装在标记中。这应该适合你:
var temp = "<div>Some text</div><p>More text<span>here</span></p><p>Even more</p>";
$("<span>" + temp + "</span>").find('span,p').
contents().unwrap().end().end().html()`
有关示例,请参阅http://jsfiddle.net/18u5Ld9g/1/。
作为一个更通用的功能:
function stripTags(html, tags) {
// Tags must be given in CSS selector format
return $("<span>" + html + "</span>").find(tags).
contents().unwrap().end().end().html();
}