http://jsfiddle.net/mark69_fnd/DyRCZ/:
在Chrome上:
在IE9上:
我正在使用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
我很蠢。是的,我是。
答案 0 :(得分:1)
jQuery文档没有声明支持HTML字符串数组作为输入。
.after(content [,content])
内容要在匹配元素集中的每个元素之后插入的HTML字符串,DOM元素或jQuery对象。
content 在匹配元素集合中的每个元素之后插入的一个或多个其他DOM元素,元素数组,HTML字符串或jQuery对象。
编辑:好的,再次查看之后,它可以以一种HTML字符串数组的方式读取,但我认为这不是阅读它的方式。在这种情况下,文档是模糊的,应该修复。
答案 1 :(得分:1)
The .after()
API支持DOM元素数组,而不是显式的html字符串数组。只需使用简单的字符串连接:
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)
我在IE9上运行得很好。您传递的是数组,而不是文本字符串。尝试将数组连接成一个字符串并传递它,你会没事的。
此外,如果要继续使用ELEMENTS数组,则必须按原样创建它们:
rows.push($("<tr/>").html('<td colspan="2">This is item ' + i + '</td>'));