为什么jQuery.after不能在IE9上运行?

时间:2012-08-23 17:29:57

标签: jquery internet-explorer

http://jsfiddle.net/mark69_fnd/DyRCZ/

在Chrome上:

enter image description here

在IE9上:

enter image description here

我正在使用jQuery 1.8.0

现在,我知道IE9很糟糕,但IE是5大浏览器之一,jQuery应该将开发人员与IE的“特性”隔离开来,不是吗?

那么,出了什么问题?

感谢。

P.S。

我知道IE主题邀请某种谈话,但请 - 建设性。

修改

对于那些声称字符串数组不起作用的人。 jQuery 1.8.0支持它,否则它既不会在Chrome上也不会在Firefox上运行。但它确实对他们两个都有!唯一的问题是IE9,这意味着jQuery 1.8.0 after() API在那里被打破。

EDIT2

我认为即使在Chrome上,jQuery 1.8.0在after()上也存在更多问题。例如,下面应该工作吗?

$('#itemsHeader').after("         
                        <tr><td>a</td></tr>");​

http://jsfiddle.net/mark69_fnd/Nw8Hz/

那怎么样:

$('#itemsHeader').after("         <tr><td>a</td></tr>");​

答案是前者不起作用,后者起作用!从html角度来看,两者都是相同的,应该可行。但它甚至不在Chrome上。

EDIT3

我很蠢。是的,我是。

3 个答案:

答案 0 :(得分:1)

jQuery文档没有声明支持HTML字符串数组作为输入。

  
    

.after(content [,content])

         

内容要在匹配元素集中的每个元素之后插入的HTML字符串,DOM元素或jQuery对象。

         

content 在匹配元素集合中的每个元素之后插入的一个或多个其他DOM元素,元素数组,HTML字符串或jQuery对象。

  

编辑:好的,再次查看之后,它可以以一种HTML字符串数组的方式读取,但我认为这不是阅读它的方式。在这种情况下,文档是模糊的,应该修复。

答案 1 :(得分:1)

The .after() API支持DOM元素数组,而不是显式的html字符串数组。只需使用简单的字符串连接:

http://jsfiddle.net/DyRCZ/11/

var i, rows = "";

for (i = 0;i < 4; i += 1){
    rows += '<tr><td colspan="2">This is item ' + i + '</td></tr>';
}
$('#itemsHeader').after(rows);​

jQuery docs explaining arguments

附加参数 - 与其他内容添加方法类似... .after()也支持传入多个参数作为输入。支持的输入包括DOM元素,jQuery对象,HTML字符串和DOM元素数组。

正如此处明确说明的那样,字符串数组不是该方法的受支持参数。仅仅因为它在chrome中工作,并不意味着它是一个有意和可靠的功能。 jQuery标准化了跨浏览器的预期行为。未记录的功能可以采用这种方式,具体取决于浏览器的特定js实现如何处理案例。

答案 2 :(得分:0)

On IE9 http://jsfiddle.net/DyRCZ/3/

我在IE9上运行得很好。您传递的是数组,而不是文本字符串。尝试将数组连接成一个字符串并传递它,你会没事的。

此外,如果要继续使用ELEMENTS数组,则必须按原样创建它们:

http://jsfiddle.net/DyRCZ/10/

rows.push($("<tr/>").html('<td colspan="2">This is item ' + i + '</td>'));