共通クラスで表される既存の要素セットに新しい div 要素をオンザフライで追加しようとしています。この一連の要素には jQuery .data() も含まれており、これを使って簿記を行います。
問題は、「before()」を使用して新しい要素を追加しようとすると、前述の .data() 値が消去されることです。しかし、これは「after()」を使用する場合には当てはまりません。
これが役立つかどうかはわかりませんが、着信 div 要素は、それらが追加される既存の div 要素のセットと同じクラスを共有します。
違いを知るには、JavaScript コードの .after() と .before() の間の行を切り替えるだけです。
簡単に参照できるように、ここにコードも貼り付けます。
HTML スニペット
<div id="parent-container">
<div id='child1' class="child">I am a child 1 - static</div>
</div>
JavaScript スニペット
$(document).ready(function() {
var children = $(".child");
children.data("newData", "Data for .child elements");
alert("before dom manipulation -> " + children.data("newData"));
var dynamicChildDiv = $("<div id='child2' class='child'>I am child 2 - dynamic</div>");
// Adding a new div "after" the first .child works fine as far as preserving the existing properties on .class
$(".child:first").after(dynamicChildDiv);
// Adding a new div "before" the first .child causes havoc on the stored properties on .child
//UNCOMMENT ME AFTER COMMENTING THE ".after" method above.
//$(".child:first").before(dynamicChildDiv);
children = $(".child");
alert("after dom manipulation -> " + children.data("newData"));
});