3

可以说我有一个这样的字符串:

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

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

所以我得到了这样的字符串

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

我想像使用正则表达式来查找第一个 div 的 id 为“div2”或任何 div 的 id 并计算括号直到它到达“< /div>”。问题是“div3”最后也有一个“< /div>”。

我要删除的 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

4 回答 4

14

只需将字符串放入 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();
于 2013-06-05T12:46:38.520 回答
2

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

例如。$('#div2').remove();

如果它不是 DOM 的一部分,并且您将它放在一个字符串中,您可以执行以下操作:

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

于 2013-06-05T12:47:58.723 回答
1

jQuery.remove()会做

$("#div2").remove();
于 2013-06-05T12:46:46.107 回答
0

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

于 2013-06-05T12:48:42.987 回答