Reputation: 9759
This question occurred to me after a user named patrick pointed out an error in an answer I'd given earlier today.
Given the following 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>
and the jQuery api documentation:
.append( content ) content An element, HTML string, or jQuery object to insert at the end of each element in the set of matched elements.
.add( html ) html An HTML fragment to add to the set of matched elements.
It seems like I should see both text blocks being added to the div, however only the one added using append is actually added, so the page looks like:
original text
new text from append
Can anyone explain to me why this is?
Upvotes: 2
Views: 737
Reputation: 72971
add
does not add the element/html to the page, it adds it to the jQuery object set. Check out the doc: http://api.jquery.com/add/. It has a paragraph on this.
Upvotes: 1
Reputation: 106332
.add()
adds matching elements to the set of matched elements and returns a new jQuery set.
Try this:
var $div = $("#div");
console.log($div.add('.myClass'));
You should end up with a jQuery object containing the objects matching #div
and .myClass
. It basically adds two jQuery objects together. It does nothing to append/insert these objects into the DOM.
If you pass HTML to .add()
you will end up creating those elements and adding them to the set returned by add.
Upvotes: 1
Reputation: 34168
The .add() does add it, but in order for it to appear, we would need to add one of the insertion methods to the chain.
Upvotes: 1
Reputation: 630389
.add(html)
just adds the element to the jQuery object (it's a document fragment at this point), it doesn't insert it into the DOM :)
.append()
is for a different purpose, it actually adds the content to the matched elements, as their children, whereas .add()
it's a sibling, and only inside that jQuery object, not in the DOM yet.
If for example you did this, .add()
would have approximately the effect you're thinking of:
$('#div1').add('<p>new text from add</p>').appendTo('body');
This does the following:
id="div1"
element via a selector<body>
Upvotes: 4