我有一个意想不到的问题。
HTML
<div id="div1" class="myDiv"></div>
<div id="div2" class="myDiv"></div>
<div id="div3" class="myDiv"></div>
<div id="div5" class="myDiv"></div>
<div id="div6" class="myDiv"></div>
JS
$(function() {
var $divs = $('.myDiv');
// create new div not in tree
var $div = $('<div/>').attr("id","div4").addClass('myDiv');
// insert #div4 in right position. Only in stack, not in dom tree.
$divs = $divs.slice(0,3).add($div).add($divs.slice(3));
console.log($divs);
});
输出
[div#div1.myDiv, div#div2.myDiv, div#div3.myDiv, div#div5.myDiv, div#div6.myDiv, div#div4.myDiv ]
警告:我不想将它插入到 dom 树中(例如$div.appendBefore($divs[3])
),我只想将它附加到我的堆栈$divs
中。
我认为这个堆栈是一个有序列表。因此,我的目标是动态创建 a#div4
并将其插入 $divs
堆栈而不将其插入 DOM 树中。插入有效,但 jquery 似乎忽略了给定的顺序。
对于这个问题,我还有其他解决方案(即在 dom 中附加,但不显示),好的.. 但是:
我的问题是:为什么?这是一些缓存优化的错误,还是记录在案的功能?
我也试过:
var $newDivs = $();
$divs.each(function(i,e) {
if(i==3)
$newDivs = $newDivs.add($div);
$newDivs = $newDivs.add(e);
});
console.log($newDivs);
但输出是一样的。
编辑:只是为了完整性:这只是对复杂代码的快速破解。我知道目的不干净