[英]Why Does Append Work Here But Add Does Not?
在一个叫patrick的用户指出了我今天早些时候给出的答案中的错误之后,我想到了这个问题。
鉴于以下html:
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
<script type="text/javascript">
$(function(){
$('#div1').add('<p>new text from add</p>');
$('#div1').append('<p>new text from append</p>');
});
</script>
</head>
<body>
<div id="div1">
original text</div>
</body>
</html>
和jQuery api文档:
.append(content)content一个元素,HTML字符串或jQuery对象,用于插入匹配的元素集中的每个元素的末尾。
.add(html)html要添加到匹配元素集中的HTML片段。
看来我应该看到两个文本块都被添加到div中,但是实际上仅添加了使用append添加的一个文本块,因此页面如下所示:
原文
附加的新文本
谁能向我解释为什么?
.add(html)
只是将元素添加到jQuery对象 (此时是文档片段),它不会将其插入DOM中:)
.append()
目的不同,它实际上是将内容作为子元素添加到匹配的元素中 ,而.add()
是同级元素 ,并且仅在该jQuery对象内部,尚不在DOM中。
例如,如果您这样做, .add()
将大致具有您正在考虑的效果:
$('#div1').add('<p>new text from add</p>').appendTo('body');
这将执行以下操作:
id="div1"
元素 <body>
.add()确实添加了它,但是为了使其出现,我们需要向链中添加一种插入方法。
.add()
将匹配的元素添加到匹配的元素集中,并返回一个新的jQuery集。
尝试这个:
var $div = $("#div");
console.log($div.add('.myClass'));
您应该以一个jQuery对象结束,该对象包含与#div
和.myClass
匹配的对象。 它基本上将两个jQuery对象添加在一起。 将这些对象附加/插入到DOM中没有任何作用。
如果将HTML传递给.add()
,最终将创建这些元素并将其添加到add返回的集合中。
add
不会将element / html添加到页面,而是将其添加到jQuery对象集。 查看文档: http : //api.jquery.com/add/ 。 它有一段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.