0

我有由 CMS 用户填充的 div 区域,并通过富文本编辑器发送数据。如何在使用 jQuery时删除两个以上的连续br标签?<div>

我试过了parent()closest()但没有用。

例如,CMS 用户使用富文本编辑器添加了此 HTML 代码。

<div class="cms-data">
<br>
<span>
<br><br><br><br><br><br>
<a href="/uploads/755/a1.xls" target="_blank">xls</span></a>
<br><br><br>
</span>
<br><br>
</div>

编辑:<div>我在cms-data 中添加了一个类名。

4

3 回答 3

1

这是一种方法:

$("#starting-point").find("br").each(function() {
    if (this.previousSibling && this.previousSibling.nodeName.toUpperCase() == 'BR') {
        $(this).remove();
    }
});

这会找到br给定容器中的所有元素(在我的例子中,带有 的元素id "starting-point")。然后它按文档顺序遍历它们。如果我们有一个具有直接前一个兄弟元素的br元素,我们将其删除。如果它前面的东西不是br元素(例如文本节点或非br元素),我们将不理会它。请注意,这并不认为<br> <br>是两个连续的元素,因为它们之间有一个空格。

实例| 来源

于 2013-11-08T14:26:31.213 回答
0

DOM!

遇到a<br>时,将其删除。当遇到文本或元素时,<br>不会删除下一个。当遇到一个元素时,removeSequentialBR也会调用它。

function removeSequentialBR(node) {
    var child = node.firstChild;
    var remove = true;

    while (child) {
        if (child.nodeType === 1) {
            if (child.nodeName === "BR") {
                if (remove) {
                    var newChild = child.nextSibling;
                    child.parentNode.removeChild(child);
                    child = newChild;
                    continue;
                }

                remove = true;
            } else {
                remove = false;
                removeSequentialBR(child);
            }
        } else if (child.nodeType === 3 && /\S/.test(child.nodeValue)) {
            remove = false;
        }

        child = child.nextSibling;
    }
}

这是一个演示。

于 2013-11-08T14:26:26.460 回答
-2

您可以只使用正则表达式来解析文本并替换所有不适合的出现

value = value.replace("/(<br>(\s)*){2,}/","<br><br>");

1000是一个神奇的高数,应该包括所有的<br>s;如果需要,增加这个值。也许有无限的价值?0 也许?

编辑:对不起,答案不好。我修正了表达。现在它可以正常工作并且确实找到了所有可能发生的集合。

于 2013-11-08T14:36:21.557 回答