如何防止向DOM节点添加元素?

时间:2013-02-15 12:55:12

标签: javascript

我有一个非常令人作呕的问题。 “恶心”,因为我没有完全控制整个网页,因此不得不破解我的成功之路。

情况

我有自己的脚本,它被加载到网页中,还有一个div容器,用于显示页面的导航。我想添加一个指向该容器的链接,该容器应该只包含该单个链接。

问题

还有第三方脚本,它还添加了指向该容器的链接。它在AJAX回调函数中执行此操作

我尝试了什么

1。在文档完全加载后删除所有链接

这是不可能的,因为第三方脚本通过AJAX回调加载内容,因此当页面完全加载时,尚未呈现不需要的链接。

2。重命名div容器

将我的链接添加到容器后,我完全剥离了容器,删除了类名,ID等。但第三方脚本仍然找到了容器。

第3。将DOMNodeInserted事件附加到容器

在我称之为浏览器的任何内容中都能很好用。但在IE中失败了。 IE是该页面用户使用的主要浏览器。

我还能尝试什么?

3 个答案:

答案 0 :(得分:1)

如果第三方脚本使用jQuery,那么您可以尝试ajaxComplete()

答案 1 :(得分:0)

您可以覆盖/包装其他脚本用于添加元素的DOM方法,例如appendChild()。像这样的东西(伪代码)

var originalAppend = document.appendChild;
document.appendChild = function () {
    if condition {
        originalAppend.apply(document, arguments);
    }
}

答案 2 :(得分:0)

您可以侦听DOMSubtreeModified事件,并恢复原始div状态。

var originalChildren = $('#content').children();

var setOriginal = function(e) {
    $('#content').off('DOMSubtreeModified');
    $('#content').empty().append(originalChildren);
    $('#content').on('DOMSubtreeModified', setOriginal);
};

$('#content').on('DOMSubtreeModified', setOriginal);

Test it