特定のブランチのみを保持したいツリー スタイルの構造があります。
リストは次のようになります。
ul.level-1
--li
----ul.level-2
------li
------li
--li
----ul.level-2
------li
------li
------li
選択した要素 (第 2 レベルの要素) を与えることで、これが属するものを除くli
すべてのトップ レベルを削除したいと考えています。li
li
ツリー内で反復せずにこれは可能ですか?
特定のブランチのみを保持したいツリー スタイルの構造があります。
リストは次のようになります。
ul.level-1
--li
----ul.level-2
------li
------li
--li
----ul.level-2
------li
------li
------li
選択した要素 (第 2 レベルの要素) を与えることで、これが属するものを除くli
すべてのトップ レベルを削除したいと考えています。li
li
ツリー内で反復せずにこれは可能ですか?
あなたは次のようなことをすることができます:
$("li").click(function() {
var $this = $(this);
$this.closest("ul.level-1").children("li").filter(function() {
return !$this.closest(this).length;
}).remove();
});
まず、closest()を使用して最上位の<ul>
要素を照合します。<li>
次に、その子要素ごとに、 filter()を使用しclosest()
て、クリックされた<li>
要素が現在のリストアイテムの子孫であるか、そのリストアイテム自体であるかを確認します。これにより、クリックされたアイテムのブランチが除外され、残りのアイテムでremove()が呼び出されます。
これを試して:
$('.level2 li').click(function(){
$(this).closest('li').siblings().remove()
})
私があなたを正しく理解しているなら、これはあなたが必要とすることをするはずです:
$('li.selected').closest('li.toplevel').siblings('li').remove();
このデモを試す
$("li").click(function(){
$(this).parents("li").siblings().remove();
});