Jquery,“$ .each(”,函数在IE中返回错误。“长度”为空或不是对象

时间:2010-02-04 20:53:37

标签: asp.net javascript jquery internet-explorer

我的代码在FireFox中工作正常但我的用户仅限于IE。我在IE中遇到错误,与我的JQUERY函数有关。

 populateTable:function(returnList) {


     var self = this;
     var eat = $.evalJSON(returnList.firstChild.textContent)
     $.each(eat,function() {


$("<tr><td>" + this.reportId + "</td><td>" + this.description + "</td><td>" + 
this.drawingNumber + "<td></tr>").insertAfter(self.tblResults[0].childNodes[1]);

 })


}

IE正在使用以下消息错误地使用$ .each:

'长度'为空或不是对象

$ .each函数的任何想法或解决方法?

更新:returnList是来自Ajax调用的XML文档对象。我正在尝试检索位于XML标记内的JSON对象字符串。

4 个答案:

答案 0 :(得分:3)

你的问题可能在于这一行

returnList.firstChild.textContent

由于returnList是XML DOM对象,因此Internet Explorer遍历并访问与现实世界的其余部分不同的内容(即FF等)。所以,我会添加一些jQuery为你做腿部工作。

$(returnList).find('string').text();

这应该会在all browsers supported by jQuery中返回您的JSON字符串。

此外,如果您尝试插入一行,则会以一种奇怪的方式进行操作。假设self.tblResults [0]是你要追加行的表DOM对象,试试这个:

$(self.tblResults[0]).append("<tr><td>" + this.reportId + "</td><td>" + this.description + "</td><td>" + this.drawingNumber + "</td></tr>");

答案 1 :(得分:1)

我使用jquery 1.6.2遇到了同样的问题。 我在jquery(最小化版本),each方法中进行了更改,以便在修复错误(Ticket#9974)之前进行解决方法,这对我来说很有用。

在jquery-1.6.2.min.js的char 12361上我添加了这个条件:if(!a)return;

所以这个char的代码看起来像:

each:function(a,c,d){if(!a)return;var f,g=0,h=a.length,i=h===b||e.isFunction(a);

而不是:

each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);

希望它有所帮助。

答案 2 :(得分:0)

您上次关闭的“td”标记缺少斜杠

答案 3 :(得分:0)

如果tblResult是一个表,它将只有一个子节点,IE中有一个<tbody>(至少有时,我不知道是否总是如此)。