据我所知,以下代码应该可以工作,创建一个<div>
元素,然后创建一个<p>
元素;该表达式应生成一个包含两个元素的 jQuery 对象:
$("<div>first element's content</div>").after("<p>second element's content</p>");
然而,我得到的是非常不同的。文档(参见标题“插入断开连接的 DOM 节点”)告诉我,上面的代码应该生成一个 jQuery 对象,同时获取两个 HTML 片段并构建两个 DOM 元素。但是,我得到的,在 jQuery 的几个不同版本中,都在 1.4 以上,是一个只有 1 个节点的 jQuery 对象。但是,下面的代码工作得很好,返回(我相信是)正确的 jQuery 对象,里面有两个元素:
$("<div></div>").after("<p>second element's content</p>");
这个例子也适用:
$("<div></div>").after("<p>second element's content</p>").after("<p>third element's content</p>");
如果正在创建的第一个 DOM 节点为空,则该方法似乎.after()
可以正常工作,但如果不是(与附加到它的后续 DOM 节点的内容无关)则不会。
我是否遗漏了一些关于 jQuery 的内部结构、古怪的 DOM 问题和/或 JavaScript 特性,或者这只是一个从 1.4 版到 1.7 版持续存在的 jQuery 错误?
(这是一个微薄的 JSFiddle非常清楚地展示了这个问题。)