JQuery:插入新创建的元素

我有这个代码(运行jQuery 1.4.2)
var elementToAdd = $('<h3>').html('header');
var p = $('<p>').html('hello world');
elementToAdd.after(p);
$('div#content').append(elementToAdd);

但是,输出

<div id="content">
  <h3>header</h3>
</div>

添加“Hello world”段落.

我究竟做错了什么?

我一直在尝试一些变化:

这也不起作用:

var elementToAdd = $('<div>Header</div>');
var p = $('<p>hello world</p>');
elementToAdd.after(p);

或这个:

var elementToAdd = $('<h3>header</h3>').after('<p>hello world</p>');

但这有效(至少在Firefox上):

var elementToAdd = $('<div>').after('<h3>header</h3>').after('<p>hello world</p>');

为什么?

解决方法

编辑:要修改原始集,可以将.push()一个DOM元素(不是jQuery对象)放入集合中.
var elementToAdd = $('<h3>').html('header');
var p = $('<p>').html('hello world');

   // Push the DOM element in
elementToAdd.push( p[0] );   // [0] gets the DOM element at index 0
$('div#container').append( elementToAdd );​

而不是.after(),使用jQuery的.add()方法.

var elementToAdd = $('<h3>').html('header');
var p = $('<p>').html('hello world');

 // Add the new object ----------------v
$('div#container').append( elementToAdd.add(p) );​

这将把它添加为你想要的兄弟姐妹.

它返回一个新的jQuery对象,其中两个元素都是兄弟.因为它不修改原始对象,所以需要在.append()中调用它或将结果存储在要追加的变量中.

编辑:(如在另一个答案中所述,您现在可以使用after(),例如add(),因为它返回一个新集合并且不会修改原始集合.)

为了解释原因,这是因为jQuery对象是一个DOM元素数组. DOM元素可以是具有嵌套后代的单个元素,但不能是两个兄弟元素.所以,当你执行.after()时,你正在尝试为数组中的每个元素添加一个兄弟.

为了处理兄弟姐妹,jQuery将它们作为附加项存储在其Array中.

因此,当您通过传递2个或更多兄弟元素来创建jQuery对象时,它会将它们分开,并使它们成为Array中的单独项.

var $obj = $("<div>div element</div> <span>span element</span>");

这将为您提供一个包含2个项目的数组的jQuery对象.

$obj[0] is the <div> element
$obj[1] is the <span> element

因此,如果您要单独创建它们,则需要使用.add()将新项目添加到Array.

var $obj = $("<div>div element</div>");

$obj[0] is the <div>

var $span = $("<span>span element</span>");
$obj = $obj.add( $span );

$obj[0] is the <div>
$obj[1] is the <span>

相关文章

页面搜索关键词突出 // 页面搜索关键词突出 $(function () {...
jQuery实时显示日期、时间 html: &lt;span id=&quot...
jQuery 添加水印 &lt;script src=&quot;../../../.....
中文:Sys.WebForms.PageRequestManagerParserErrorExceptio...
1. 用Response.Write方法 代码如下: Response.Write(&q...
Jquery实现按钮点击遮罩加载,处理完后恢复 思路: 1.点击按...