繁体   English   中英

为什么追加在这里起作用,但是增加却不起作用?

[英]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"元素
  • 向该jQuery对象的一组匹配元素中添加一个新文档片段,该文档片段现在长2个元素
  • 将它们附加到<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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM