jQuery API

.appendTo()

.appendTo( target ) Returns: jQuery

Description: Insert every element in the set of matched elements to the end of the target.

  • version added: 1.0.appendTo( target )

    targetA selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter.

The .append() and .appendTo() methods perform the same task. The major difference is in the syntax-specifically, in the placement of the content and target. With .append(), the selector expression preceding the method is the container into which the content is inserted. With .appendTo(), on the other hand, the content precedes the method, either as a selector expression or as markup created on the fly, and it is inserted into the target container.

Consider the following HTML:

<h2>Greetings</h2>
<div class="container">
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
</div>

We can create content and insert it into several elements at once:

$('<p>Test</p>').appendTo('.inner');

Each inner <div> element gets this new content:

<h2>Greetings</h2>
<div class="container">
  <div class="inner">
    Hello
    <p>Test</p>
  </div>
  <div class="inner">
    Goodbye
    <p>Test</p>
  </div>
</div>

We can also select an element on the page and insert it into another:

$('h2').appendTo($('.container'));

If an element selected this way is inserted elsewhere, it will be moved into the target (not cloned):

<div class="container">
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
  <h2>Greetings</h2>
</div>

If there is more than one target element, however, cloned copies of the inserted element will be created for each target after the first.

Example:

Appends all spans to the element with the ID "foo"

<!DOCTYPE html>
<html>
<head>
  <style>#foo { background:yellow; }</style>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
	<span>I have nothing more to say... </span>

  <div id="foo">FOO! </div>
<script>$("span").appendTo("#foo"); // check append() examples</script>
</body>
</html>

Demo:

Comments

  • Support requests, bug reports, and off-topic comments will be deleted without warning.

  • Please do post corrections or additional examples for .appendTo() below. We aim to quickly move corrections into the documentation.
  • If you need help, post at the forums or in the #jquery IRC channel.
  • Report bugs on the bug tracker or the jQuery Forum.
  • Discussions about the API specifically should be addressed in the Developing jQuery Core forum.
  • Sasha Chedygov
    I don't know if it's just me, but I've found that generating some HTML and then using appendTo is faster than simply appending HTML. For example, this:

    $("some html").appendTo($('#element'));

    Is faster than:

    $('#element').append("some html");

    Seems unintuitive, but that's what my benchmarks showed. Might be specific to my application, though. And unless you're doing this on thousands of elements at a time (like me), it shouldn't even matter, but I thought I'd share.
  • Maybe because in the first case its the $ function that is used on the html markup, maybe a bit faster than the append function to parse HTML ?

    I use it for dialogs, instead of adding a div in my markup and then adding jQuery to it, i make a :
    var div = $("<div/>");
    div.attr("title","My Dialog title").appendTo("body").dialog(options);

    In the options i add a listener for the "close" event and then just remove the div.
    Thats a bit slower than if I already had the div in my markup but I want to keep my code clean.
  • R-Enemy
    This may be a noob question, but I haven't been able to find a good answer.

    By using appendTo, can you access the element later with jQuery("#id")?

    Example:
    <div id="container"></div>
    <script>
    $("<div/>",{id:'div1'}).appendTo("#container");
    $("#div1").html('Hello'); //does this work?
    </script>

    I've had issues with this:
    <script>
    $("#container").html('<div id="div1"></div>");
    $("#div1").html("Hello"); //fails
    </script>

    I'm guessing the latter approach fails because div1 doesn't really exist in the DOM. So, the root of my question: Does appendTo() or append() add the element/html to the DOM?
  • mahmudkhaled
    try this:
    $("#container").html("<div id=\"div1\"></div>");
  • Where the doc says:
    We can also select an element on the page and insert it into another:
    $('h2').append($('.container'));

    There should be:
    $('h2').appendTo($('.container'));
  • Fixed. thanks!