На объект jQuery в collection
не влияют вызовы clone
и insertAfter
, которые вы выполняете в l oop. jQuery объекты являются снимками (например, те, которые вы получаете из querySelectorAll
), а не живыми коллекциями (например, те, которые вы получаете из getElementsByTagName
или getElementsByClassName
или аналогичных), и ни clone
, ни insertAfter
не добавляют их на collection
.
Вы легко можете себе это доказать:
// Your code (without the unnecessary `$()` around `collection`
var collection = $("div");
collection.each(function(){
var originalDiv = $(this);
var cloneDiv = $(this).clone();
cloneDiv.insertAfter(originalDiv);
});
// Now, do another operation on the contents of `collection` -- notice how only
// the original contents are affected, not the divs created during the loop
collection.css("color", "blue");
<div>a</div>
<div>b</div>
<div>c</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Даже если вы использовали один из методов для добавления элемента к объекту jQuery, как правило, jQuery методы создают новые jQuery вместо изменения состояния объекта jQuery, который вы вызываете. (Я думаю, что есть исключения из этого правила, но одно не сразу приходит в голову.) Например, вы можете «добавить» элемент, вызвав add
, но это не изменит вызываемый вами объект jQuery это на; вместо этого он создает и возвращает новый jQuery объект, содержащий исходные элементы и новый.