如何使用jQuery从HTML标签中取消文本包装?
例如,如何将以下HTML转换为:
<p>A <i>sentence</i> with <b>bold words</b>.</p>
转换为纯文本(即移除加粗标签)
<p>A <i>sentence</i> with bold words.</p>
如何仅使用jQuery而不使用正则表达式?
你可以这样做:
$("b").each(function() {
$(this).replaceWith(this.childNodes);
});
注意:这将保留您在其中的任何HTML,而.text()
可能会对其进行转换。<b></b>
,则可以在jQuery 1.4+中更轻松地使用Cheeso的答案。$("p").html(function(i,h){ return h.replace(/<b>/g,'').replace(/<\/b>/g,''); });
我越来越喜欢先使用wrapInner再使用unwrap的方法。
例如,如果你想要取消超链接的包裹
<a id="anId" href="#">sample text</a>
然后您可以通过以下方式取消超链接:
$('#anId').wrapInner('<span/>');
$('#anId span').unwrap();
<b>
,那么可以这样做。var h = $(elementSelector).html;
h = h.replace("<b>","");
h = h.replace("</b>","");
$(elementSelector).html(h);
我不确定为什么你不喜欢正则表达式。
$("p").html(function(i, h) { h = h.replace(/<b>/g,''); return h.replace(/<\/b>/g,''); });
- Nick Craver$('b').contents().unwrap();
定位到所选元素的内容并将其解除包装。
如果您只想提取文本而不包括其他内容,可以使用以下方法:
$("b").replaceWith($("b").text());
我认为在这种情况下仅依赖于jQuery会不必要地使事情复杂化。使用replace
方法会更容易,该方法接受普通字符串或正则表达式。
在这种情况下,通常使用正则表达式是最好的选择,因为您希望进行多个替换,这些替换大致具有相同的模式。