Проблема, с которой вы столкнулись, заключается в том, что вы постоянно нацеливаетесь на одни и те же элементы, например,
var firstchild = frame.getElementsByClassName('firstchild')[0];
, потому что эта инструкция всегда возвращает первое вхождение такого элемента в iframe
, а не второе или третий.
Чтобы быть уверенным, что вы нацеливаетесь на правильные элементы, вы можете переписать часть своего кода, чтобы искать только те элементы, которые содержатся в определенном родительском элементе, а не во всем iframe
.
Затем вы можете использовать что-то вроде этого
var firstChild = pageID.querySelector('.firstchild');
, которое будет искать только элемент (первое вхождение) с классом firstchild
, который содержится в каком-то другом элементе (в данном случае элемент сохранен в pageID
).
Проверьте ниже (я обменял form
на document
, чтобы мы могли проверить здесь):
var pageCLASS = document.querySelectorAll(".page");
var leng = pageCLASS.length;
for (var i = 1; i <= leng; i++) {
var pageID = document.getElementById('page' + i);
var firstChild = pageID.querySelector('.firstchild');
var thirdChild = pageID.querySelector('.thirdchild');
firstChild.parentNode.insertBefore(thirdChild, firstChild.nextSibling);
}
.page {
border: 1px solid #09f;
}
<div id="page1" class="page">
<div class="firstchild">first child</div>
<div class="secondchild">second child</div>
<div class="thirdchild">third child</div>
<div class="forthchild">fourth child</div>
</div>
<div id="page2" class="page">
<div class="firstchild">first child</div>
<div class="secondchild">second child</div>
<div class="thirdchild">third child</div>
<div class="forthchild">fourth child</div>
</div>
<div id="page3" class="page">
<div class="firstchild">first child</div>
<div class="secondchild">second child</div>
<div class="thirdchild">third child</div>
<div class="forthchild">fourth child</div>
</div>