强制使div为空时超出最大堆栈大小

时间:2015-02-16 11:49:02

标签: javascript jquery

我正在使用nicEdit编辑器,如果我向contenteditable div添加一些内容并为其添加一些样式,然后从div中删除所有内容并再次键入内容,则需要使用内联样式的span标记中的先前样式。我试图使用下面的代码

强制使用div
$j(document).ready(function () {
    if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1) {
        $j('.nicEdit-main').bind('DOMNodeRemoved', function (event) {
            if (this.innerHTML == "" || this.innerHTML == "<br>")
                this.innerHTML = "";
        });
    }
});

但是现在我在控制台中出现“超出最大堆栈大小”错误。

1 个答案:

答案 0 :(得分:1)

您的问题是设置innerHTML会触发DOMNodeRemoved事件,因此您会进入一个事件循环,在某些时候会超过堆栈大小。这是一个解释问题的小提琴:

http://jsfiddle.net/38b7zd9b/1/

无论如何,有点不清楚你要用上面的代码完成什么,为什么你要使用变异事件,但要注意你使用的是不受支持/弃用的API,这意味着API不可靠

https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Mutation_events