2017-09-27 2 views
0

ich mit einer bestehenden jQuery (Version 3.2.1) Funktion arbeite.

$('#example').on('click', 'tbody td:not(:first-child)', 
    function (e) { 
     // do stuff 
    }); 

In diesem Fall Funktion (e) nur dann tätig werden, wenn die TD ist nicht die erste Spalte in der Reihe.

Wenn ich einige nicht Bedingungen hinzufügen muss (in was eine Tabelle mit mindestens 5 solcher Spalten ist), wird die Funktion etwas hässlicher.

Wenn ich es ausprobiere, weiß ich, dass es funktioniert, aber es muss einen besseren Weg geben, dies zu tun.

Gibt es eine sauberere Technik, um eine Reihe von nicht Bedingungen im Selektor anzuzeigen? Ich dachte, dass ich den Selektorstring durch eine Funktion ersetzen könnte, aber ich habe keine Beispiele dafür gesehen, selbst auf dem jQuery website.

+3

': nicht (.excludeme)' –

+0

wo .excludme ist eine Klasse? – RandomHandle

+0

nun, 'excludeme' wäre der Klassenname. –

Antwort

1

@ lilezeks Antwort ist eine gute. Wenn Sie Ihr Ziel auf einzelne Zeilen verkürzen möchten, können Sie die Zeichenfolgen in einer Variablen an anderer Stelle definieren und dann die Variable als Auswahlelement an Ihren Ereignishandler übergeben.

var selector_foo = 'tbody td:not(:first-child):not(:nth- 
child(2)):not(:nth-child(3))' 
... 
$('#example').on('click', selector_foo, 
    function (e) { 
     // do stuff 
}); 
+0

Beide Ansätze haben je nach Ökosystem ihre Stärken und Herausforderungen. Ich kann mehrere Antworten aufzählen, aber ach, ich kann nicht mehr als eine als "Antwort" markieren. – RandomHandle

1

Suchen Sie etwas wie this?

$("#example") 
    .not(":first-child") 
    .not(":nth-child(2)") 
    .not(":nth-child(3)") 
    .on('click', 
    function (e) { 
    // do stuff 
    }); 

Haftungsausschluss: Ich habe nicht überprüft, ob das wirklich funktioniert.

+0

Ich testete @Kevin B Kommentar und es ist eigentlich die einfachste. ': not (.excludme)' Alles, was ich tun muss, ist die spezifischen Spalten zu dekorieren, die ich brauche, und es funktioniert perfekt. – RandomHandle

+0

Mit einer Ausschlussklasse ist eine schnellere Lösung. Beachten Sie jedoch, dass Sie auch hier das Codebeispiel "nicht" verketten können. – lilezek

-5

Die Verwendung einer Klasse wäre eine viel einfachere Lösung. Fügen Sie einfach die Klasse, die Sie verwenden möchten, zu den Zellen hinzu, die Sie ausschließen möchten, und wählen Sie wie gewohnt aus.

tbody td:not(.exclude)