1

クリックした要素の親要素と親の唯一の兄弟要素を1行で削除しようとしています。これは私の2ライナーソリューションです:

$(document).ready(function() {
    $('.close').click(function() {
        $(this).parent().siblings('.sibling').remove();
        $(this).parent().remove();
    });
});

これが実用的なフィドルです。兄弟を削除するときに、クリックされた要素の親が既に見つかっているため、DOM を 2 回ナビゲートすることを避けたいと考えています。再度実行する必要はありません。親と兄弟の両方を要素でラップし、そのスーパー要素を削除するだけでよいことは承知していますが、現時点ではそれも避けたいと思います。

jQueryの.add()機能を使ってみたのですが、うまくいきません。ご協力いただきありがとうございます!

4

1 に答える 1

1

あなたが探している.addBack()

$(this).parent().siblings('.sibling').addBack().remove();

デモ

  • andSelf.addBack()for jQuery < 1.8と同等です

を使用.add()すると、親を変数に格納して、2 回トラバースするのを避ける必要があります。

var $father = $(this).parent();
$father.siblings('.sibling').add($father).remove();
//one-liner without storing in a variable would traverse the DOM twice:
$(this).parent().siblings('.sibling').add($(this).parent()).remove();

ご覧のとおりaddBack、この場合、この方法はより実用的です。

要素の親と親の兄弟が親内の唯一の要素である場合は、次も使用できます。

$(this.parentNode.parentNode).empty();

デモ

ネイティブプロパティは、jQuery のメソッドparentNodeよりも少し高速です。.parent()どちらを使うかは自由です。


このような小さなトラバースでは、どちらの方法でもオーバーヘッドがほとんどないことに注意してください。元のコードとこれらのバージョンのパフォーマンスの違いはほとんどありません。

于 2013-09-03T22:16:00.840 に答える