标签名称为null或不是对象 - 使用最新版本的jQuery(1.2.6)在IE 7中出现错误消息

时间:2008-09-17 15:59:11

标签: asp.net javascript jquery

让其他人看到此错误消息。谷歌的快速检查并没有给我带来太多帮助。

4 个答案:

答案 0 :(得分:2)

你可能正在尝试这样做......

alert($("#myElement").tagName);

你应该这样做......

alert($("#myElement")[0].tagName);

答案 1 :(得分:1)

确保在页面呈现后运行脚本。如果您的脚本位于页面顶部并立即运行,并且您的DIV低于该脚本,则DIV尚不存在。

答案 2 :(得分:1)

如果你只是在IE中看到它,它可能是DivX网络插件的错误:

http://drupal.org/node/1038058

问题在DivX网站上得到确认,该网站上写着“在下一版本中已修复”(2011年4月)。

http://labs.divx.com/node/16824

基本上,错误是DivX用一个试图小写标记名的拦截替换了el.appendChild()函数,但是不打算检查它是否是文本节点。如果您尝试执行$('body').append('hi!')之类的操作,这将破坏jQuery。此外,它无法返回破坏SWFObject的元素。

解决方法是确保永远不要使用文本节点或多个顶级元素调用append()。如果您要附加一系列项目:

  append($('<div>hi</div><div>there</div>')) 

确保将它们包装在顶级div中以避免隐含的文本节点:

  append($('<div><div>hi</div><div>there</div></div>')) 

以下是appendChild被破坏的完整解决方法,同样的方法可用于共享该错误的insertBeforereplaceChild。在加载页面后的某个时间插入Divx JS,因此您可能需要轮询此内容。

window.fixDivxPlayerBug = function () {
    var b = document.getElementsByTagName('body')[0];
    if ( window['ReplaceVideoElements'] && ! b.appendChildDivx ){
        b.appendChildDivx = b.appendChild;
        b.appendChild = function (el) {
            if( el.tagName == null) {
                var wrap = document.createElement('div');
                wrap.appendChild(el);
                b.appendChildDivx(wrap);
            }
            else {
                b.appendChildDivx(el);
            }
            return el;
        };
    }
};

答案 3 :(得分:0)

抱歉,对我而言,这是一个半问题。我正在浏览我的.js文件并立即删除整个代码块。我已将它隔离到一个特定的.js文件。

感谢所有人阅读这个问题并回复。