我想在下面的代码中删除包含父段落标记的元标记。
<p>
<meta content="text/html; charset=unicode" http-equiv="Content-Type" />
</p>
<p>
<meta content="MSHTML 8.00.6001.18702" name="GENERATOR" />
</p>
<div>
<img border="0" src="http://localhost:15978/TestImages/Que_152_0/51099.jpg" /></div>
<br />
<br />
<div>
write something on the pic shown.</div>
我可以使用
删除元标记.replace(/<meta([^>]+)>/g, '');
正则表达式,希望正则表达式用父paragrapy标签替换meta
答案 0 :(得分:1)
这可以通过这个简短的jQuery命令轻松完成:
$('p meta').remove();
在选择器中轻松找到<meta>
子项的<p>
个标签,remove()
会立即删除所有匹配的元素。
当你的HTML在字符串中时会变得有点复杂,但它仍然不是太糟糕:
var content = '...insert above html here...';
// insert into a div to parse as HTML
var $content = $('<div />').html(content);
// find all <meta> tags inside <p> and remove them
$content.find('p meta').remove();
// convert contents back to a string
content = $content.html();
工作小提琴:http://jsfiddle.net/WVWPS/
虽然上面的代码对我有用,但是某些浏览器可能会出现问题,因为<meta>
不是文档正文中的有效HTML元素。 This question表明jQuery在某些情况下可能无法正确创建<meta>
等元素。
如果您遇到特定于浏览器的问题,可以尝试以下方法:
var content = '...insert above html here...';
// convert <meta> tags to <span> tags with a "meta" class
content = content.replace(/<meta /g, '<span class="meta" ');
// insert into a div to parse as HTML
var $content = $('<div />').html(content);
// find all .meta elements inside <p> and remove them
$content.find('p .meta').remove();
// convert contents back to a string
content = $content.html();
工作小提琴:http://jsfiddle.net/a4Wa3/
在我们解析HTML之前,我们正在进行字符串替换,以便将<meta>
代码转换为<span class="meta">
代码。
请注意,最后一个选项是一个非常脆弱的解决方案,如果您更改元标记的生成方式,可能会中断。作为一般规则,应避免使用正则表达式或其他字符串函数操作HTML,因为它可以serious side effects。
答案 1 :(得分:0)
您可以在jQuery中执行以下操作,
$("meta").each(function () {
var $this = $(this);
if ($this.parents("p").length > 0) {
$this.remove();
}
});