从MSWord粘贴如何删除</p> <ol> / <ul>标记内的<p>标记</ul> </ol>

时间:2013-03-19 17:34:07

标签: javascript regex

我正在将从MSWord粘贴的html中的垃圾标签移到我的NicEdit RTE中。

<OL>
<LI>Hello</LI>
<P dir=ltr align=left>
<LI>Two</LI>
<P></P>
<P dir=ltr align=left>
<LI>Three</LI>
<P></P>
<P dir=ltr align=left>
<LI></LI>
<P></P></OL>

我已经剥离了我们的应用程序不使用的一大堆标签。不过我们确实使用了<p>代码,因此我不能删除所有粘贴的<p>代码。

我需要一种快速(不一定是合法)的方式来剥离<p><ol>标记内的<ul>标记。

</?p\s?.*?>p代码匹配,但我不知道如何检查我是否在olul内。

2 个答案:

答案 0 :(得分:1)

不要使用正则表达式,使用DOM操作:

var div = document.createElement("div"),
    p;

div.innerHTML = str;
p = div.querySelectorAll("ol p, ul p");

for (var i = 0, len = p.length; i < len; i++) {
    p[i].parentNode.removeChild(p[i]);
}

console.log(div.innerHTML);

请注意,querySelectorAll在您的问题中非常有用,但只有现代浏览器才支持它。请参阅MDN上的兼容性信息。

DEMO: http://jsfiddle.net/bSdMW/

答案 1 :(得分:0)

您是否尝试过使用http://tidy.sourceforge.net/中的HtmlTidy?您可能根本不需要编写自己的源代码。无论如何,使用正则表达式解析XML充满了危险。