次のマークアップがあるとします。
<div id="nodes">
<ul>
<li><a href="#">Colors</a>
<ul>
<li><a href="#">Red</a></li>
<li><a href="#">Green</a></li>
<li><a href="#">Blue</a></li>
</ul>
</li>
<li><a href="#">Sizes</a></li>
<li><a href="#">Material</a></li>
</ul>
</div>
兄弟ノードを追加する jQuery 関数を作成しました。
$("#nodes ul li").click(function(e) {
addSibling(this, 'new one');
e.stopPropagation();
});
function addSibling(selector, content){
var markup='<li><a href="#">' + content + '</a></li>';
$(selector).parent().append(markup);
}
元のノードをクリックする限り、最初はうまくいくようです。たとえば、「青」をクリックすると、次のようになります。
<div id="nodes">
<ul>
<li><a href="#">Colors</a>
<ul>
<li><a href="#">Red</a></li>
<li><a href="#">Green</a></li>
<li><a href="#">Blue</a></li>
<li><a href="#">new node</a></li>
</ul>
</li>
<li><a href="#">Sizes</a></li>
<li><a href="#">Material</a></li>
</ul>
</div>
ただし、新しいノードをクリックすると、新しいノードを兄弟として配置する代わりに、1 レベル上になります (つまり、「色」、「サイズ」、および「材料」の兄弟)。jQuery によって生成されたマークアップを見ると、違いがわかりません。そのため、新しいノードが元のノードと異なる動作をする理由がわかりません。ありがとう。