jQuery has an .after()
method, and also an .insertAfter()
method.
What\'s the difference between them? I think I can use .after()
It also seems that passing attributes of the inserted element doesn't work with ".insertAfter", but works with ".after"
works:
$('#element').after('<p>Test</p>', { 'class': 'element_class', 'id': 'element_id' });
doesn't work:
$('<p>Test</p>', { 'class': 'element_class', 'id': 'element_id' }).insertAfter('#element');
*edit: seems it doesn't work with ".after" neither, but only with ".appendTo"
They are mutual opposites.
'after' inserts the argument after the selector.
'insertAfter' inserts the selector after the argument.
Here is an example of the same thing done with:
<div class="container"> <h2>Greetings</h2> <div class="inner">Hello</div> <div class="inner">Goodbye</div> </div> $( "<p>Test</p>" ).insertAfter( ".inner" ); Each inner <div> element gets this new content: <div class="container"> <h2>Greetings</h2> <div class="inner">Hello</div> <p>Test</p> <div class="inner">Goodbye</div> <p>Test</p> </div>
<div class="container"> <h2>Greetings</h2> <div class="inner">Hello</div> <div class="inner">Goodbye</div> </div> $( ".inner" ).after( "<p>Test</p>" ); <div class="container"> <h2>Greetings</h2> <div class="inner">Hello</div> <p>Test</p> <div class="inner">Goodbye</div> <p>Test</p> </div>
All of the answers so far are clear as mud ;-) (So I'll take a stab at it too!)
If you start off with this Html:
<p id="pOne">Para 1</p>
<p id="pTwo">Para 2 <span id="sMore">More</span></p>
After inserts some new content after the matching tags:
$("p") // Match all paragraph tags
.after("<b>Hello</b>"); // Insert some new content after the matching tags
The end result is:
<p id="pOne">Para 1</p><b>Hello</b>
<p id="pTwo">Para 2 <span id="sMore">More</span></p><b>Hello</b>
On the other hand, InsertAfter moves one or more elements which already exist on the DOM after the selected elements (Really, this method could be called MoveAfter):
$("#sMore") // Find the element with id `sMore`
.insertAfter("#pOne"); // Move it to paragraph one
Resulting in:
<p id="pOne">Para 1</p><span id="sMore">More</span>
<p id="pTwo">Para 2</p>
After() and Insertafter() both appends an element, the major change will come for chaining
In after()
you are appending the new element after your selector and then if you are using chain for the element then any function you used will fire on the selector
not on the newly added element, and the opposite will performed in insertAfter()
in which the chaining will performed on the newly added element for example,
After() and InsertAfter()
HTML
<div class="after">After Div</div>
------------------------------------------------------
<div class="insertafter">Insert after div</div>
SCRIPT
var p='<p>Lorem ipsum doner inut..</p>';
$('.after').after(p)//chaining, performed on .after div not on p
.css('backgroundColor','pink');
//you can chain more functions for .after here
$(p).insertAfter('.insertafter')//chaining, performed on p not on .insertafter div
.css('backgroundColor','yellow');
// here you can chain more functions for newly added element(p)
See above the selector
and contents
are changing in both functions. The same will apply on the list of following:
Live Demo
If you want to see both, performance wise then after()
is faster than insertAfter()
See after-vs-insertafter-performance.
Here you can find a very very good tutorial of how to add content to a page using the jQuery methods prepend(), prependTo(), append(), appendTo(), before(), insertBefore(), after(), insertAfter(), wrap(), wrapAll() and wrapInner()
after( content ) Returns: jQuery
Insert content after each of the matched elements.
insertAfter( selector ) Returns: jQuery
Insert all of the matched elements after another, specified, set of elements.