jQuery esclude gli elementi con una determinata classe nel selettore


127

Voglio impostare un trigger di evento click in jQuery per alcuni tag di ancoraggio.

Voglio aprire alcuni collegamenti in una nuova scheda mentre ignoro quelli con una determinata classe (prima di chiedere non posso mettere le classi sui collegamenti che sto cercando di catturare poiché provengono da un CMS).

Voglio escludere i collegamenti con la classe "button"OR"generic_link"

Ho provato:

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

Ma questo non sembra funzionare, come posso fare anche un'istruzione OR da includere "generic_link"nell'esclusione?

Risposte:


263

È possibile utilizzare il metodo .not () :

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

In alternativa, puoi anche usare il selettore: not () :

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

C'è una piccola differenza tra i due approcci, tranne che .not()è più leggibile (specialmente quando incatenato) ed :not()è molto più veloce. Vedi questa risposta Stack Overflow per maggiori informazioni sulle differenze.


1
Quindi potrei fare: $ (". Content_box a"). Not (". Button"). Not (". Generic_link"). Click (function (e) ...?
Titan

1
Ha funzionato perfettamente, anche durante l'utilizzo .each().
cfx,

Sembra che ci sia un bug durante l'utilizzo .text(): il testo dell'elemento rimosso usando say .notè ancora nel testo.
Netsi1964,


2

Per aggiungere alcune informazioni che mi hanno aiutato oggi, un oggetto jQuery / thispuò anche essere passato al selettore .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>

L'esempio sopra può essere semplificato, ma voleva mostrare l'uso di thisnel not()selettore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.