【问题标题】:Why jQuery.after does not work on IE9?为什么 jQuery.after 在 IE9 上不起作用?
【发布时间】:2012-08-24 02:25:09
【问题描述】:

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

在 Chrome 上:

在 IE9 上:

我使用的是 jQuery 1.8.0

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

那么,怎么了?

谢谢。

附言

我知道 IE 主题会邀请参加某种类型的谈话,但请 - 具有建设性。

编辑

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

EDIT2

我认为 jQuery 1.8.0 即使在 Chrome 上也有更多after() 的问题。例如,以下是否可行?

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

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

然后呢:

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

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

EDIT3

我很傻。是的,我是。

【问题讨论】:

  • Additional Arguments - 与其他添加内容的方法类似... .after() 也支持传入多个参数作为输入。支持的输入包括 DOM 元素、jQuery 对象、HTML 字符串和 DOM 元素数组。 同样来自文档,语言更加清晰。仅仅因为它在 chrome 中工作,并不意味着它是一个有意和可靠的功能。 jQuery 标准化了它在浏览器中的 intended 行为。未记录的功能可以采用一种方式或另一种方式,具体取决于浏览器的特定 js 实现如何处理案例。
  • @nbrooks - 我只是不明白如何在 Firefox 和 Chrome 上意外地传递字符串数组。此外,这个 API 在 IE9 上还有其他问题 - 请参阅下面其他人的 cmets。
  • 可能是那些浏览器以某种方式将数组视为逗号分隔值列表(支持)而不是单个对象...我很想对此进行更多实验,但遗憾的是我没有有一个 IE 版本可以测试。如果你想通了,请更新你的问题并告诉我们
  • 附注第二次编辑不是由于无效的 html,而是无效的 javascript - 您不能将字符串包装成这样的换行符,您必须关闭字符串并使用 + 将其与新字符串连接
  • 大声笑,别担心,发生在我们最好的人身上

标签: jquery internet-explorer


【解决方案1】:

jQuery 文档并未声明支持将 HTML 字符串数组作为输入。

.after(内容[,内容])

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

content 一个或多个附加 DOM 元素、元素数组、HTML 字符串或 jQuery 对象,以插入到匹配元素集中的每个元素之后。

编辑:好的,再看一遍,可以用HTML字符串数组的方式读取,但我认为不是这样读取的。在这种情况下,文档不明确,应予以修正。

【讨论】:

  • “元素数组、HTML 字符串或 jQuery 对象”是什么意思?
  • 以下一项或多项:1. DOM 元素,2. 元素数组,3. HTML 字符串,4. jQuery 对象——我同意,这很模糊,但我确定这是阅读方式。
  • 如果“元素、HTML 字符串或 jQuery 对象”都适用于“数组”,那么“数组”之前应该有一个单词“或”。所以我猜这里的意思只是“元素数组”。
  • 伙计们!字符串数组在 Chrome 上工作!这意味着 jQuery 1.8.0 包含处理它的代码。这段代码在 IE9 上被破坏了。否则,请解释字符串数组在 Chrome 上的工作原理。
  • @mark,同意。它是一个错误,应该处理。他们要么删除严格处理 jquery 元素数组的功能,要么将处理字符串数组的功能添加到 IE9。 pimvdb 提交了该错误,并可能在下次更新时修复它。同时,使用变通方法。 :)
【解决方案2】:

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 实现如何处理案例。

【讨论】:

  • @mark 请看我的评论。当 jQuery 加载到他们已添加但未决定与您共享的某些功能时,您无法将 chrome 中的所有行为归因于
【解决方案3】:

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

我让它在 IE9 上运行良好。您正在传递一个数组,而不是文本字符串。尝试将数组加入一个字符串并传递它,你会没事的。

另外,如果你想继续使用 ELEMENTS 数组,你必须这样创建它们:

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

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

【讨论】:

  • 是的,但是jQuery.after() API 支持数组,该数组在 Chrome 中有效,但在 IE 中无效。这意味着,jQuery 的 API 在 IE 上被破坏了。
  • 是的,这很奇怪。 jsfiddle.net/DyRCZ/6 在 1.7.2 的 Chrome/IE9 中工作,但在 1.8.0 的 IE9 中失败。
  • @pimvd,绝对看起来像 1.8 API 中的错误
  • 另外,我同意,如果它在一个浏览器中工作,它应该在所有其他浏览器中工作......
猜你喜欢
  • 1970-01-01
  • 2013-09-07
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 2012-06-13
相关资源
最近更新 更多