nextElementSibling Polyfill给出错误'Element'未定义

时间:2017-12-28 19:56:08

标签: javascript dom polyfills ie8-compatibility-mode

我在兼容模式下使用IE来支持旧网页和编写新页面。

我正在尝试使用nextElementSibling,所以我一直在将以下Polyfill添加到我的JS文件中。我的目标是,如果不支持'nextElementSibling',那么它将使用Polyfill中的定义。

以下是Mozilla网站的Polyfill:

if (!("nextElementSibling" in document.documentElement)){
Object.defineProperty(Element.prototype, "nextElementSibling", {
    get: function(){
        var e = this.nextSibling;
        while(e && 1 !== e.nodeType)
            e = e.nextSibling;
        return e;
    }
});}

当我运行时,我收到错误“'元素'未定义。”

我认为Element.prototype是内置功能。<​​/ p>

在添加Polyfill之前,是否需要添加其他内容? 我如何使这个工作?

任何(与主题相关)帮助将不胜感激。

更新

根据建议我尝试了以下但是它没有执行重新定义的nextElementSibling。这是我在JS文件开头放的代码:

if (!("nextElementSibling" in document.documentElement))
{
    if (!window.Element)
    {
        Element = function() { }
        Element.prototype.nextElementSibling = function()
        {
            var e = this.nextSibling;
            while (e && 1 !== e.nodeType)
                e = e.nextSibling;
            return e;
        }

        Element.prototype.firstElementChild = function()
        {
            var el = this.firstChild;
            while (el && el.nodeType !== 1)
            {
                el = el.nextSibling;
            }
            return el;
        }

        var __createElement = document.createElement;
        document.createElement = function(tagName)
        {
            var element = __createElement(tagName);
            for (var key in Element.prototype)
                element[key] = Element.prototype[key];
            return element;
        }

        var __getElementById = document.getElementById;
        document.getElementById = function(id)
        {
            var element = __getElementById(id);
            for (var key in Element.prototype)
                element[key] = Element.prototype[key];
            return element;
        }
    }
}

稍后在我的JS文件中,我这样做:

var temp = this.parentElement.parentElement.nextElementSibling;

它不起作用。定义的nextElementSibling永远不会运行,temp = undefined。

0 个答案:

没有答案