从html字符串中删除div及其内容

时间:2013-06-05 12:43:33

标签: javascript jquery html regex

假设我有一个这样的字符串:

<div id="div1"></div>
<div class="aClass" id="div2">  
   <div id="div3" class="anotherClass"></div>
   <div id="div4" />
</div>
<div id="div5"></div>

我想从字符串和div中的所有内容中删除div2

所以我有一个像这样的字符串

<div id="div1"></div>
<div id="div5"></div>

我在想像使用正则表达式来找到id为“div2”的第一个div或div的id是什么,并计算括号,直到它变为“&lt; / div&gt;”。问题是“div3”还有一个“&lt; / div&gt;”在末尾。

我要删除的div的内容可能包含更多或更少的div,然后也是。

有关如何编码的任何想法?

更新:

                var htmlText = editor3.getValue();
            var jHtmlObject = jQuery(htmlText);
            jHtmlObject.find("#div2").remove();
            var newHtml = jHtmlObject.html();
            console.log(newHtml);

为什么这不会在控制台中返回任何内容?

UPDATE2!: 我做了一个jsFiddle让我的问题可视化.. http://jsfiddle.net/WGXHS/

4 个答案:

答案 0 :(得分:13)

只需将字符串放入jQuery并使用find然后删除。

var htmlString = '<div id="div1"></div>\
<div class="aClass" id="div2">\ 
   <div id="div3" class="anotherClass"></div>\
   <div id="div4" />\
</div>\
<div id="div5"></div>';

var jHtmlObject = jQuery(htmlString);
var editor = jQuery("<p>").append(jHtmlObject);
editor.find("#div2").remove();
var newHtml = editor.html();

答案 1 :(得分:2)

jQuery .remove()会做

$("#div2").remove();

答案 2 :(得分:2)

如果您有权使用jQuery并且您的HTML是DOM的一部分,则可以使用$.remove()

EG。 $('#div2').remove();

如果它不是DOM的一部分,并且你有一个字符串,你可以这样做:

$('#div2', $(myHTML)).remove();

答案 3 :(得分:0)

如果您控制生成字符串,则可以使用正则表达式选项,这样您就可以确保属性和缩进的顺序。如果不是你最好的选择是使用HTML解析器。如果你在浏览器中工作,jQuery是一个不错的选择。如果您在服务器端工作,则需要找到所选语言的解析器。