.append(),prepend()、. after()和.before()


205

我非常精通编码,但是有时我会遇到似乎基本上做相同事情的代码。我在这里的主要问题是,为什么要使用.append()而不是然后.after()反之?

我一直在寻找并且似乎找不到关于两者之间差异以及何时使用它们以及何时不使用它们的清晰定义。

一个人相对于另一个人有什么好处?为什么我先使用一个而不是另一个?有人可以向我解释一下吗?

var txt = $('#' + id + ' span:first').html();
$('#' + id + ' a.append').live('click', function (e) {
    e.preventDefault();
    $('#' + id + ' .innerDiv').append(txt);
});
$('#' + id + ' a.prepend').live('click', function (e) {
    e.preventDefault();
    $('#' + id + ' .innerDiv').prepend(txt);
});
$('#' + id + ' a.after').live('click', function (e) {
    e.preventDefault();
    $('#' + id + ' .innerDiv').after(txt);
});
$('#' + id + ' a.before').live('click', function (e) {
    e.preventDefault();
    $('#' + id + ' .innerDiv').before(txt);
});

2
我从不使用过appendappendTo习惯于?)错误,即,我在语义上似乎也更正确,尤其是因为after(链式链)after
-nb

听起来您真正想知道的是为什么要选择追加与之后才能获得相同的结果。假设您有<div class ='a'> <p class ='b'> </ p> </ div>。然后$('。a')。append('hello')与$('。b')。after('hello')具有相同的影响。即:<div class ='a'> <p class ='b'> </ p>'hello'</ div>。在那种情况下,没关系。生成的html是相同的,因此请根据要在代码中最方便构造的选择器来选择append或after。
tgoneil

Answers:


446

看到:


.append()将数据放在一个元素内last index
.prepend()并将前面的elem放在first index


假设:

<div class='a'> //<---you want div c to append in this
  <div class='b'>b</div>
</div>

.append()执行它看起来就像这样:

$('.a').append($('.c'));

执行后:

<div class='a'> //<---you want div c to append in this
  <div class='b'>b</div>
  <div class='c'>c</div>
</div>

在执行中用.append()拨弄。


.prepend()执行它看起来就像这样:

$('.a').prepend($('.c'));

执行后:

<div class='a'> //<---you want div c to append in this
  <div class='c'>c</div>
  <div class='b'>b</div>
</div>

在执行中用.prepend()拨弄。


.after()将元素放在元素之后将元素
.before()放在元素之前


使用之后:

$('.a').after($('.c'));

执行后:

<div class='a'>
  <div class='b'>b</div>
</div>
<div class='c'>c</div> //<----this will be placed here

在执行中用.after()弄弄。


之前使用:

$('.a').before($('.c'));

执行后:

<div class='c'>c</div> //<----this will be placed here
<div class='a'>
  <div class='b'>b</div>
</div>

在执行中用.before()弄弄。



1
@joraid通过执行中的一些js小提琴链接,根据您的评论更新了答案。
2014年

1
很好的解释,但是如果我想在外部html视图中加载怎么办?像这样使用MVC:$("#viewPlaceHolder").append("/clients/RelationDropdown", {selected: selected });
Djeroen

4
@Djeroen .append()不会以这种方式加载它。您必须使用.load(url, params)
2015年

1
真好!我还能问一下“ $(element).append(content)”和“ $(content).appendTo(target)”之间的区别吗?(我不想在此开始新
Apostolos

135

此图片显示在下面给出了一个清晰的认识,并显示之间准确的区别.append().prepend().after().before()

jQuery信息图

您可以从形象,看到.append().prepend()添加新的元素作为元素(棕色着色)的目标。

.after().before()添加新的元素作为同级元素(黑色彩色)的目标。

这是一个演示,可以更好地理解。


编辑:这些功能的翻转版本:

jQuery插入信息图,以及功能的翻转版本

使用此代码

var $target = $('.target');

$target.append('<div class="child">1. append</div>');
$target.prepend('<div class="child">2. prepend</div>');
$target.before('<div class="sibling">3. before</div>');
$target.after('<div class="sibling">4. after</div>');

$('<div class="child flipped">or appendTo</div>').appendTo($target);
$('<div class="child flipped">or prependTo</div>').prependTo($target);
$('<div class="sibling flipped">or insertBefore</div>').insertBefore($target);
$('<div class="sibling flipped">or insertAfter</div>').insertAfter($target);

在这个目标上:

<div class="target">
    This is the target div to which new elements are associated using jQuery
</div>

因此,尽管这些函数颠倒了参数顺序,但每个函数都会创建相同的元素嵌套:

var $div = $('<div>').append($('<img>'));
var $img = $('<img>').appendTo($('<div>'))

...但是它们返回一个不同的元素。这对于方法链接很重要


2
非常容易理解的图片。:)
阿卜杜勒·哈默德

已投票!如果我问,那么图片中的appendTo和prependTo呢?请更新。
Brst dev7 '18

我一直在参考您的信息图表。希望您喜欢添加翻转功能。
鲍勃·斯坦

37

append()prepend()用于将内容插入元素(使内容成为其子元素),而after()before()将内容插入元素(使内容成为其同胞)。


19

最好的方法是去文档。

.append().after()

  • append():将由参数指定的内容插入匹配元素集中每个元素的末尾
  • after():在匹配元素集中的每个元素之后插入由参数指定的内容。

.prepend().before()

  • prepend():将由参数指定的内容插入匹配元素集中每个元素的开头
  • before():在匹配的元素集中的每个元素之前插入由参数指定的内容。

因此,追加和前置是指对象的子代,而前后则是指对象的同级。


9

.append().after().prepend()和之间有一个基本区别.before()

.append()在最后将参数元素添加到选择器元素的标签内,.after()将参数元素添加的元素的标签之后

该反之亦然是.prepend().before()

小提琴


5

他们每个人都没有额外的优势。这完全取决于您的情况。下面的代码显示了它们的区别。

    Before inserts your html here
<div id="mainTabsDiv">
    Prepend inserts your html here
    <div id="homeTabDiv">
        <span>
            Home
        </span>
    </div>
    <div id="aboutUsTabDiv">
        <span>
            About Us
        </span>
    </div>
    <div id="contactUsTabDiv">
        <span>
            Contact Us
        </span>
    </div>
    Append inserts your html here
</div>
After inserts your html here

5
<div></div>    
// <-- $(".root").before("<div></div>");
<div class="root">
  // <-- $(".root").prepend("<div></div>");
  <div></div>
  // <-- $(".root").append("<div></div>");
</div>
// <-- $(".root").after("<div></div>");
<div></div>    

3

DOM(HTML页面)想象成一棵树。HTML元素是该树的节点。

append()增加了一个新的节点添加到child你叫它的节点。

Example:$("#mydiv").append("<p>Hello there</p>") 

creates a child node <p> to <div>

after()增加了一个新的节点作为同级或同级或孩子,你把它称为对节点的父节点。


3

尝试回答您的主要问题:

为什么要使用.append()而不是.after()或反之?

当使用jquery操纵DOM时,使用的方法取决于所需的结果,并且经常使用的方法是替换内容。

在替换内容时,您需要.remove()该内容并将其替换为新内容。如果您.remove()现有的标签然后尝试使用.append(),则该标签将不起作用,因为标签本身已被删除,而如果使用.after(),则新内容将添加到(现已删除的)标签的“外部”,并且不受先前标签的影响.remove()

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.