我的代码在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对象字符串。
答案 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>
(至少有时,我不知道是否总是如此)。