jQueryはセレクターに特定のクラスを持つ要素を除外します


127

特定のアンカータグのjQueryでクリックイベントトリガーを設定したいのですが。

特定のクラスのリンクを無視しながら、新しいタブで特定のリンクを開きたいのです(CMSから取得するため、キャッチしようとしているリンクにクラスを配置することはできません)。

クラス"button"ORのリンクを除外したい"generic_link"

私が試してみました:

$(".content_box a[class!=button]").click(function (e) {
    e.preventDefault();     
    window.open($(this).attr('href'));
});

しかし、それはうまくいかないようです。また"generic_link"、除外に含めるためにORステートメントをどのように実行しますか?

回答:


263

.not()メソッドを使用できます。

$(".content_box a").not(".button")

または、:not()セレクターを使用することもできます。

$(".content_box a:not('.button')")

2つのアプローチの違いはほとんどありませんが、.not()より読みやすく(特に連鎖している場合)、:not()わずかに高速です。違いの詳細については、このスタックオーバーフローの回答を参照してください。


1
だから私はできる:$( "。content_box a")。not( "。button")。not( "。generic_link")。click(function(e)...?
Titan

1
を使用している場合でも、完全に機能しました.each()
cfx 2013年

使用時にバグがあるようです-sayを使用して.text()削除された要素.notのテキストがまだテキスト内にあります。
Netsi1964 2015


2

今日私に役立ついくつかの情報を追加するために、jQueryオブジェクト/ this.not()セレクターに渡すこともできます。

$(document).ready(function(){
    $(".navitem").click(function(){
        $(".navitem").removeClass("active");
        $(".navitem").not($(this)).addClass("active");
    });
});
.navitem
{
    width: 100px;
    background: red;
    color: white;
    display: inline-block;
    position: relative;
    text-align: center;
}
.navitem.active
{
    background:green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="navitem">Home</div>
<div class="navitem">About</div>
<div class="navitem">Pricing</div>

上記の例は簡略化できますthisが、not()セレクターでの使用法を示したいと思いました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.