我在兼容模式下使用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。