IE9 AngularJs问题:无法获取属性“nodeName”的值:对象为空或未定义undefined。

18
在使用AngularJS加载页面时,IE9出现以下错误:“无法获取属性'nodeName'的值:对象为空或未定义undefined”。Chrom/FF没有问题。请问有什么解决方法吗?我以为这个问题已经在AngularJS 1.0.1版本中得到了修复。

在 AngularJS 的 Google Group 上,有人发布了完全相同的问题。该页面链接到一个 GitHub 页面,其中包含一些代码。 - cebru
这个问题在AngularJS 1.2.13版本中仍然存在 - 不受版本影响。无效的标记很可能会继续导致错误,这不是框架可以修复的问题。 - Alex Osborn
8个回答

23

当我意外使用以下非法标记时,在IE9中出现了此错误。

<table>
   <h3>foo</h3>

    ..... blah

</table>

也许可以运行一个 HTML 代码校验器,确保你没有违反任何规则。


4
在工作中我遇到了这个确切的问题。在<tr>标签后面有一些被错放的文本,这些文本并不在<td>标签内。无效的标记似乎是问题所在。 - cebru
是的,我的问题也一样。但 Chrome/FF 没有抛出这样的错误。 - Aki
这个错误让我和我的搭档程序员都感到困惑。我们不小心把一些标记留在了 HTML 的错误、无效的部分。感谢 @MatthewTschiegg 找到了这个问题。 - mkelley33
同样,复制粘贴错误意味着我在关闭表格标签内有一个段落标签...默默失败并杀死IE9,没有报告任何错误,几乎无法测试,除非访问站点上的每个页面,该死! - toxaq

4

问题是:

<table>
    <tr ng-repeat="p in list">
        <td>{{p.f1}}</td> {{p.f2}}
    </tr>
<table>

请记住,根据HTML规范,<tr>标签应该只包含<td>标签而不是其他标签或原始文本。现代浏览器(包括IE 10)可以处理这个错误,但在IE 9中,angular会引发一个错误。


确实。我几分钟前也遇到了类似的情况,错误是一个格式不正确的HTML注释。 - Mauricio Arias Olave

2
很可能你在

标签内部的语法出了问题。
<table> <SOMETHING> </table>

我建议您从浏览器中复制DOM并在https://validator.w3.org/check上进行检查。 寻找错误,例如:文档类型不允许在此处使用元素“SOMETHING”;缺少一个“TH”,“TD”开始标记


0
对我来说,问题出在表格中的thead标签:
 <table>
   <thead>bla</thead>
    ...        
</table>

0
对我来说,这是一个在 div 中有一个表格行的情况。一旦我删除了中间的 div,问题就解决了。
<table>
  <div>
    <tr></tr>
  </div>
</table>

0

我曾经遇到过同样的问题,原因是在一个 <table> 中,我放了一些没有被包含在 <tr><td> 中的 <h3> 标签,此外,我还使用了一些 <br><br/> 标签,更好的做法是使用 <br />,以符合 XHTML 的规范。


0

对我来说问题出现在“Back”超链接之前。我使用了 htmllint 并解决了所有非法标记错误,除了 Angular 的错误。


0

我在 angular-perf.js 上遇到了这个错误。如果您添加一个条件注释来排除 IE,它将可以工作,但是您将无法在 IE 中使用 angular-perf。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接