我在编码方面相当熟练,但偶尔我也会遇到一些代码,它们似乎在做基本相同的事情。我的主要问题是,为什么你要使用.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);
});

当前回答

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

append()将一个新节点添加到您调用它的节点的子节点。

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

creates a child node <p> to <div>

after()将一个新节点作为同级或子节点添加到所调用节点的父节点。

其他回答

<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>    

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

    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

下面显示的这张图像可以清晰地理解和显示.append(), .prepend(), .after()和.before()之间的确切区别。

从图中可以看到.append()和.prepend()将新元素作为子元素(棕色)添加到目标。

.after()和.before()将新元素作为兄弟元素(黑色)添加到目标中。

为了更好地理解,这里有一个演示。


编辑:这些函数的翻转版本:

使用以下代码:

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>'))

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

在.append()和.after()以及.prepend()和.before()之间有一个基本的区别。

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

反之亦然,对于.prepend()和.before()。

小提琴

Append()和prepend()用于在元素内部插入内容(使内容成为其子元素),而after()和before()用于在元素外部插入内容(使内容成为其兄弟元素)。