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.min.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.
  • Dawn
    Its a shame there isn't the possibility to use a lambda like there is on the .append() function. V1.4.next please?

    EG

    foo.appendTo(function(){return $(this).closest("bar")});
    will fail because the scope is wrong. 'this' is the document node, not foo.

    foo.append(function(){return $(this).next()});
    would work as 'this' is foo.
  • pte
    I have two select option boxes.. and I wanted to use this function to copy from list A to the list B but when i do so it removes it from list a and appends it to list B. why does it remove it?

    <select id="lista" name="lista" size="3"> <option>item1</option> <option>item2</option> <option>item3</option> <option>item4</option> </select>

    <select id="listb" name="listb" size="3"> </select>


    <script language="javascript" type="text/javascript">
    $(document).ready(function(){
    jQuery('#lista').live('dblclick', function() {
    $('#lista option:selected').appendTo('#listb');
    });
    });
    </script>


    If i doubleclick item1 it will remove it from list a and put it in list b while i just want to just put it in list b.
  • Visceroid
    You should use $('#lista option:selected').copy().appendTo('#listb');
  • Visceroid
    Should be: $('#lista option:selected').clone().appendTo('#listb').
  • brandonkirsch
    Example for adding a new option to an HTML <select> menu:</select>
    <option value="static">First Option</option>


    <script>
    $('<option>').val('newValue').text('Second Option').appendTo('select[name=uniqueName]');
    </script>

    This creates a new <option> element, sets its value to "newValue" and the display to "Second Option" before appending it to the <select name="uniqueName"> menu.</select></option>
  • I found this a bit interesting... (add space in html tag for disqus)


    var base = $('< p id="1"/>< p id="2"/>');
    var list = [ $('< p id="3"/>') , $('< p id="4"/>') ];

    // JavaScript error, ok not in spec
    base.append(list);

    // JavaScript error, ahh...
    base.append($(list));

    // Works! with unexpected 'replace' behavior
    $(list).appendTo(base);
  • matsahlgren
    The docs could mention whether .parent() is implicitly called afterwards, or must be called explicitly -- i.e. if the context of the returned jQuery object is still the same or different. For more info please see the link I discovered at http://blog.pengoworks.com/index.cfm/2007/10/26/jQuery-Understanding-the-chain . For a long time I thought there was a bug, since some of my appendTos kept disappearing. Hopefully this info helps others.
  • Damien Ansart
    'The docs could mention whether .parent() is implicitly called afterwards, or must be called explicitly' I don't think so.
    jQuery always return the element itself.
    For the dans blog example : $("<div>inner</div>")
    .appendTo("<div>outer</div>")
    .appendTo("body");

    First, $ creates a div inner, so this div is the $ object and nothing else.
    then $ try to append it to something, and see this thing doesn't exists, it creates it (div outer), and then append it, but the object is still inner, so it returns it again.

    A good solution without using parent would be :
    $("<div>inner</div>")
    .appendTo($("<div>outer</div>")
    .appendTo("body"));
  • Visceroid
    Is it true that if the first element in the jQuery collection (the caller of .add(), or elsewise) was created using a html string (and not yet in DOM), .appendTo() will apply to that first element, but not the rest?
    I tested with these:
    Script:
    $(function()
    {
    var a = $('<div id="foo">').add('.test');
    a.appendTo($('#test')); //only <div id="foo"></div> got appended
    });
    HTML body:
    <div id="test">Test</div>
    <div class="test"></div>
    it works in this way: $('.test').add('<div id="foo"></div>').</div>
  • DBG
    i ran into the same problem.
    several elements a, b, c are created from html (i.e. var a = $('<div>...</div>') )
    and then this is executed
    $([a,b,c]).appendTo('#somewhere');

    only a gets appended.
  • 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.
  • asdfasdfasdf
    sdfa
  • 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.</div>
  • 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>");
Time to generate: 2.51928