予期しない問題が発生しました。
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 ]
警告:(のように$div.appendBefore($divs[3])
)DOMツリーに挿入したくありません。スタックに追加したいだけです$divs
。
このスタックは順序付きリストだと思いました。したがって、私の目標は、オンザフライで作成し、DOMツリーに挿入せず#div4
に $divs
スタックに挿入することでした。挿入は機能しますが、jqueryは指定された順序を無視しているようです。
私はこの問題に対する他の解決策を持っています(つまり、表示なしでdomに追加します)、わかりました..しかし:
私の質問は:なぜですか?これはキャッシュ最適化のバグですか、それとも文書化された機能ですか?
私も試しました:
var $newDivs = $();
$divs.each(function(i,e) {
if(i==3)
$newDivs = $newDivs.add($div);
$newDivs = $newDivs.add(e);
});
console.log($newDivs);
しかし、出力は同じです。
編集:完全を期すために:これは複雑なコードの高速ハックでした。私は目的がきれいではないことを知っています