Frage Gibt es eine "exists" -Funktion für jQuery?


Wie kann ich die Existenz eines Elements in jQuery prüfen?

Der aktuelle Code, den ich habe, ist dies:

if ($(selector).length > 0) {
    // Do something
}

Gibt es einen eleganteren Weg, dies zu erreichen? Vielleicht ein Plugin oder eine Funktion?


2322
2017-08-27 19:49


Ursprung


Antworten:


In JavaScript ist alles "truthy" oder "falsy" und für Zahlen 0 (und NaN) bedeutet false, alles andere true. Du könntest also schreiben:

if ($(selector).length)

Du brauchst das nicht >0 Teil.


2062
2018-02-25 19:16



Ja!

jQuery.fn.exists = function(){ return this.length > 0; }

if ($(selector).exists()) {
    // Do something
}

Dies ist eine Reaktion auf: Herding Code Podcast mit Jeff Atwood


1247
2017-08-27 19:50



Wenn du benutzt hast

jQuery.fn.exists = function(){return ($(this).length > 0);}
if ($(selector).exists()) { }

Sie würden implizieren, dass Verkettung möglich war, wenn es nicht ist.

Das wäre besser:

jQuery.exists = function(selector) {return ($(selector).length > 0);}
if ($.exists(selector)) { }

Alternative, aus den FAQ:

if ( $('#myDiv').length ) { /* Do something */ }

Sie könnten auch Folgendes verwenden. Wenn im jQuery-Objektarray keine Werte vorhanden sind, würde das Abrufen des ersten Elements im Array undefined zurückgegeben.

if ( $('#myDiv')[0] ) { /* Do something */ }

323
2018-01-14 19:46



Sie können dies verwenden:

// if element exists
if($('selector').length){ /* do something */ }

// if element does not exist
if(!$('selector').length){ /* do something */ }

98
2018-04-03 12:17



Die schnellste und semantisch selbsterklärendste Art, auf Existenz zu prüfen, ist eigentlich plain JavaScript:

if (document.getElementById('element_id')) {
    // Do something
}

Es ist etwas länger zu schreiben als die jQuery-Längenalternative, wird aber schneller ausgeführt, da es sich um eine native JS-Methode handelt.

Und es ist besser als die Alternative, Ihre eigene jQuery-Funktion zu schreiben. Diese Alternative ist langsamer, aus den Gründen, sagte @snover. Aber es würde auch anderen Programmierern den Eindruck vermitteln, dass die Funktion exists () etwas ist, das jQuery innewohnt. JavaScript würde / sollte von anderen Personen verstanden werden, die Ihren Code bearbeiten, ohne dass die Kenntnisse weiter steigen.

NB: Beachten Sie das Fehlen eines '#' vor der element_id (da dies einfach JS ist, nicht jQuery).


73
2018-01-11 12:27



Sie können ein paar Bytes speichern, indem Sie schreiben:

if ($(selector)[0]) { ... }

Dies funktioniert, da jedes jQuery-Objekt auch als Array maskiert wird. Daher können wir den Array-Dereferenzierungsoperator verwenden, um das erste Element aus dem Array zu erhalten Array. Es kehrt zurück undefined wenn am angegebenen Index kein Element vorhanden ist.


53
2018-01-18 09:04



Sie können verwenden:

if ($(selector).is('*')) {
  // Do something
}

EIN wenig vielleicht eleganter.


50
2017-09-17 17:53