【发布时间】:2018-05-18 20:54:01
【问题描述】:
据我所知,以下代码应该可以工作,创建一个<div> 元素,然后创建一个<p> 元素;该表达式应生成一个包含两个元素的 jQuery 对象:
$("<div>first element's content</div>").after("<p>second element's content</p>");
但是,我得到的却非常不同。 The documentation(参见标题“插入断开连接的 DOM 节点”)告诉我上面的代码应该生成一个 jQuery 对象,同时获取 HTML sn-ps 并构建两个 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 错误?
(Here's a meager JSFiddle 非常清楚地展示了这个问题。)
【问题讨论】:
-
正如下面对 elclanrs 回答的 cmets 中所述,
add是一个可行的替代品,我已经创建了一个 new JSFiddle 来证明它有效。但是,这并不能解释为什么 the docs 上显示的行为(甚至它的 cmets,请参阅包含“MarkAndrewSlade”答案的整个线程)对于新创建的 jQuery 对象的after方法不可用该元素有内容时的元素。
标签: javascript jquery jquery-after