it-swarm.com.de

So überprüfen Sie Nullobjekte in jQuery

Ich verwende jQuery und möchte die Existenz eines Elements auf meiner Seite überprüfen. Ich habe folgenden Code geschrieben, aber er funktioniert nicht:

if($("#btext" + i) != null) {
    //alert($("#btext" + i).text());
    $("#btext" + i).text("Branch " + i);
}

Wie überprüfe ich die Existenz des Elements?

164
Prashant

Überprüfen Sie die jQuery FAQ ...

Sie können die length -Eigenschaft der von Ihrem Selektor zurückgegebenen jQuery-Auflistung verwenden:

if ( $('#myDiv').length ){}
247
Christoph

(Da ich anscheinend nicht genug Reputation habe, um die Antwort abzustimmen ...)

Wolf schrieb:

Das Aufrufen der Eigenschaft length für ein undefiniertes oder ein Null-Objekt führt dazu, dass IE und Webkit-Browser fehlschlagen!

Versuchen Sie stattdessen Folgendes:

 // NOTE!! THE FOLLOWING IS WRONG; DO NOT USE!  -- EleotleCram
if($("#something") !== null){
  // do something
}

oder

 // NOTE!! THE FOLLOWING IS WRONG; DO NOT USE!  -- EleotleCram
if($("#something") === null){
  // don't do something
}

Zwar führt das Aufrufen der Eigenschaft length für ein undefiniertes oder ein Null-Objekt zum Fehlschlagen von Browsern, doch das Ergebnis der Selektoren von jQuery (das $ ('...')) wird niemals null oder undefiniert sein. Somit ergeben die Codevorschläge keinen Sinn. Verwenden Sie eine der anderen Antworten, sie sind sinnvoller.


(Update 2012) Da die Leute sich Code ansehen und diese Antwort ganz oben auf der Liste steht: In den letzten Jahren habe ich dieses kleine Plugin verwendet:

  jQuery.fn['any'] = function() {
     return (this.length > 0);
  };

Ich denke $ ('div'). Any () liest sich besser als $ ('div'). Length, außerdem leiden Sie weniger unter Tippfehlern: - $ ('div'). ayn () gibt einen Laufzeitfehler aus, $ ('div'). lenght wird im Hintergrund höchstwahrscheinlich immer falsch sein.

__
Änderungen November 2012:

1) Da die Leute dazu neigen, Code zu betrachten und nicht zu lesen, was um den Code herum gesagt wird, habe ich dem zitierten Code von Wolf zwei große Vorbehaltsnotizen hinzugefügt.
2) Ich habe den Code des kleinen Plugins hinzugefügt, das ich für diese Situation verwende.

59
eleotlecram

Die Suchfunktion gibt ein Array übereinstimmender Elemente zurück. Sie können überprüfen, ob die Länge Null ist. Beachten Sie die Änderung, dass die Elemente nur einmal nachgeschlagen werden und die Ergebnisse nach Bedarf wiederverwendet werden.

var elem = $("#btext" + i);
if (elem.length != 0) {
   elem.text("Branch " + i);
}

Haben Sie auch versucht, nur die Textfunktion zu verwenden - wenn kein Element vorhanden ist, wird es nichts tun.

$("#btext" + i).text("Branch " + i);
13
tvanfosson

die Funktion jquery $ () gibt immer einen Wert ungleich Null zurück. Wenn das Element nicht gefunden wurde, wird ein leeres Array zurückgegeben. Ihr Code sieht also ungefähr so ​​aus -

if ($("#btext" + i).length){
        //alert($("#btext" + i).text());
    $("#btext" + i).text("Branch " + i);
}
12
waney

In jQuery 1.4 erhalten Sie die $ .isEmptyObject-Funktion, aber wenn Sie gezwungen sind, eine ältere Version von jQ zu verwenden, wie wir es armen Drupal= Entwickler verwenden einfach diesen Code:

// This is a function similar to the jQuery 1.4 $.isEmptyObject.
function isObjectEmpty(obj) {
  for ( var name in obj ) {
    return false;
  }
  return true;
}

Verwenden Sie es wie folgt:

console.log(isObjectEmpty(the_object)); // Returns true or false.
5
theamoeba

unabhängig von Ihrer Auswahl gibt die Funktion $() immer ein jQuery-Objekt zurück, sodass es nicht zum Testen verwendet werden kann. Der beste Weg (wenn nicht der einzige) ist es, die size() -Funktion oder die native length -Eigenschaft wie oben beschrieben zu verwenden.

if ( $('selector').size() ) {...}                   
5
burntblark
if ( $('#whatever')[0] ) {...}

Das von allen nativen jQuery-Methoden zurückgegebene jQuery-Objekt ist KEIN Array, sondern ein Objekt mit vielen Eigenschaften. Eine davon ist eine "Längen" -Eigenschaft. Sie können auch nach Größe () oder get (0) oder get () suchen - 'get (0)' funktioniert genauso wie der Zugriff auf das erste Element, d. H. $ (Elem) [0].

3
James

Was ist mit "undefined"?

if (value != undefined){ // do stuff } 
3
Hugh Seagraves

benutze $("#selector").get(0) um das mit null zu überprüfen. get gibt das dom-Element zurück, bis dahin haben Sie es mit einem Array zu tun, in dem Sie die Eigenschaft length überprüfen müssen. Ich persönlich mag es nicht, die Länge auf Null zu prüfen, das verwirrt mich aus irgendeinem Grund :)

1
Emre

Mit der Eigenschaft length können Sie dies tun.

jQuery.fn.exists = function(){return ($(this).length < 0);}
if ($(selector).exists()) { 
   //do somthing
}
1
Suresh Pattu

wenn das Objekt leer ist, wird dieser Fehler zurückgegeben:
Nicht erfasster TypeError: Die Eigenschaft '0' von null kann nicht gelesen werden.
Ich versuche diesen Code
try{ if ($("#btext" + i).length) {};
} catch(err){ if ($("#btext" + i).length) { //working this code if item not NULL }; }

0
ahmadjn