0

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

<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, '');

正则表达式,希望正则表达式将 meta 替换为父 paragrapy 标签

4

2 回答 2

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 元素。这个问题<meta>表明 jQuery在某些情况下可能无法正确创建元素。

如果您遇到特定于浏览器的问题,您可以尝试以下操作:

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,因为它可能会产生严重的副作用

于 2013-06-24T07:27:21.650 回答
0

您可以在 jQuery 中执行以下操作,

$("meta").each(function () {
    var $this = $(this);
    if ($this.parents("p").length > 0) {
        $this.remove();
    }
});

测试链接

于 2013-06-24T07:22:49.677 回答