jQuery имеет метод .after()
, а также метод .insertAfter()
.
Какая разница между ними? Я думаю, что я могу использовать .after()
для вставки элементов после выбранного элемента (или элементов). Это правильно? Что .insertAfter()
для?
jQuery имеет метод .after()
, а также метод .insertAfter()
.
Какая разница между ними? Я думаю, что я могу использовать .after()
для вставки элементов после выбранного элемента (или элементов). Это правильно? Что .insertAfter()
для?
Это взаимные противоположности.
' после "вставляет аргумент после селектора.
' insertAfter "вставляет селектор после аргумента.
Вот пример того же, что и с:
<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>
Они являются обратными друг другу. Как объясняется в документации jQuery :
Это:
$("p").insertAfter("#foo");
То же самое:
$("#foo").after("p");
И, наконец, insertAfter возвращает все вставленные элементы, тогда как .after() вернет контекст, который он вызывает.
Все ответы до сих пор ясны, как грязь;-) (Так что я тоже ударю на него!)
Если вы начинаете с этого Html:
<p id="pOne">Para 1</p>
<p id="pTwo">Para 2 <span id="sMore">More</span></p>
After добавляет новое содержимое после соответствующих тегов:
$("p") // Match all paragraph tags
.after("<b>Hello</b>"); // Insert some new content after the matching tags
Конечный результат:
<p id="pOne">Para 1</p><b>Hello</b>
<p id="pTwo">Para 2 <span id="sMore">More</span></p><b>Hello</b>
С другой стороны, InsertAfter перемещает один или несколько элементов, которые уже существуют в DOM после выбранные элементы (действительно, этот метод можно было бы назвать MoveAfter):
$("#sMore") // Find the element with id `sMore`
.insertAfter("#pOne"); // Move it to paragraph one
Результат:
<p id="pOne">Para 1</p><span id="sMore">More</span>
<p id="pTwo">Para 2</p>
(после и до):
$('selector').after('new_content');
$('selector').before('new_content');
while (insertAfter и insertBefore):
$('new_content').insertAfter('selector');
$('new_content').insertBefore('selector');
$("p").insertAfter("#foo");
==
$("#foo").after("p")
Проверьте документация:
$("#foo").after("p")
совпадает с:
$("p").insertAfter("#foo");
after (content) Возвращает: jQuery
Вставить содержимое после каждого из согласованных элементов.
insertAfter (селектор) Возвращает: jQuery
Вставить все согласованные элементы за другим, указанным, набором элементов.
Также кажется, что проходящие атрибуты вставленного элемента не работают с ".insertAfter", но работают с ".after"
работы:
$('#element').after('<p>Test</p>', { 'class': 'element_class', 'id': 'element_id' });
не работает:
$('<p>Test</p>', { 'class': 'element_class', 'id': 'element_id' }).insertAfter('#element');
* edit: похоже, что он не работает с ".after", но только с ".appendTo"
Здесь вы можете найти очень хорошее руководство по добавлению контента на страницу с использованием методов jQuery prepend(), prependTo(), append(), appendTo(), before(), insertBefore(), after(), insertAfter(), wrap(), wrapAll() и wrapInner()
После() и Insertafter() оба добавляет элемент, основное изменение придет для цепочки
В after()
вы добавляете новый элемент после вашего селектора, а затем, если вы используете цепочку для элемента, то любая функция, которую вы использовали, будет срабатывать на selector
не на вновь добавленном элементе, а наоборот будет выполнена в insertAfter()
, в котором цепочка будет выполняться на вновь добавленном элементе, например,
After() и 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)
См. выше selector
и contents
изменяются в обеих функциях. То же самое относится к следующему:
Если вы хотите видеть, как производительность, так и after()
быстрее, чем insertAfter()
См. after-vs-insertafter-performance.
Одной важной особенностью некоторых синтаксисов является утечка памяти и производительность. Вставка более эффективна, чем вставка, когда у вас есть тонны элементов dom. Поэтому предпочитайте вставлять позже, а не после.