删除带有父段落标记的元标记

时间:2013-06-24 07:14:21

标签: javascript jquery html regex

我想在下面的代码中删除包含父段落标记的元标记。

<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

2 个答案:

答案 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();
    }
});

Test Link