2009-01-25 9 views
152

Ich benutze jQuery und ich möchte die Existenz eines Elements in meiner Seite überprüfen. Ich habe folgenden Code geschrieben, aber es funktioniert nicht:Wie überprüft man Null-Objekte in jQuery

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

Wie überprüfe ich die Existenz des Elements?

Antwort

241

Überprüfen Sie die jQuery FAQ ...

Sie die Länge Eigenschaft der jQuery Sammlung von Ihrem Wähler zurück verwenden können:

if ($('#myDiv').length){} 
+0

Danke, es ist wirklich sehr gut. – Prashant

+0

Was denken Sie über var _myDiv = $ ('# myDiv'); ... .... if (_myDiv.length) {...} Ausnahme erzeugen. –

+1

wie eleotlecram sagte; besser vermeiden. Länge – numediaweb

13

Die Suchfunktion gibt ein Array übereinstimmender Elemente zurück. Sie könnten prüfen, ob die Länge Null ist. Beachten Sie die Änderung, um die Elemente nur einmal nachzuschlagen und die Ergebnisse nach Bedarf wiederzuverwenden.

Haben Sie auch versucht, nur mit der Textfunktion - wenn kein Element existiert, wird es nichts tun.

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

0 ist ein falscher Wert, so dass der elem.length Ausdruck ergibt falsch - mit anderen Worten, es gibt keine Notwendigkeit für den Teil – James

+2

@ 999, ich glaube, die Prüfung gegen Null das macht ‚= 0!‘ Code lesbarer, obwohl beide Möglichkeiten für jemanden lesbar sind, der an Skriptsprachen gewöhnt ist. – Sam

12

jquery $() Funktion immer wieder zurückkehren nicht Nullwert - gemittelte Elemente entsprechen Ihnen Selektor Cretaria. Wenn das Element nicht gefunden wurde, wird ein leeres Array zurückgegeben. So Ihr Code etwas wie folgt aussehen -

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

Schön. Du lernst immer etwas Neues. – marko

+1

Ich glaube nicht, dass das $() ein Array zurückgibt. jQuery-Objekte weisen ähnliche Verhaltensweisen wie Arrays auf, aber ich denke nicht, dass es sich dabei um Arrays handelt, und ich denke, Sie werden feststellen, dass ihr Verhalten nicht mit dem von Arrays übereinstimmt. Siehe [diese kurze Demonstration] (http://jsfiddle.net/CuR9z/). – Sam

3
if ($('#whatever')[0]) {...} 

Das jQuery-Objekt, das von allen nativen jQuery Methoden zurückgegeben wird, ist kein Array, es ist ein Objekt mit vielen Eigenschaften; einer von ihnen ist eine "Länge" Eigenschaft. Sie können auch für die Größe() überprüfen oder erhalten (0) oder get() - 'erhalten (0)' funktioniert genauso wie das erste Element zugreifen, dh $ (Elem) [0]

-3
if (typeof($("#btext" + i)) == 'object'){ 
    $("#btext" + i).text("Branch " + i); 
} 
5

egal Was Sie Auswahl ist die Funktion $() gibt immer ein jQuery-Objekt zurück, so dass nicht zum Testen verwendet werden kann. Der beste Weg noch (wenn nicht der einzige) ist, die size()-Funktion oder die native Längeneigenschaft wie oben erläutert zu verwenden.

-7

Durch das Aufrufen der length -Eigenschaft auf einem nicht definierten oder einem Null-Objekt werden IE- und webkit-Browser fehlschlagen!

Statt dessen versuchen:

if($("#something") !== null){ 
    // do something 
} 

oder

if($("#something") === null){ 
    // don't do something 
} 
50

(Da ich offenbar nicht genug Ruf haben die Antwort auf stimmen ...)

Wolf schrieb:

Calling length property on undefined or a null object will cause IE and webkit browsers to fail!

Instead try this:

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

or

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

Obwohl es wahr ist, dass der Aufruf der length-Eigenschaft für ein undefiniertes oder null-Objekt dazu führt, dass Browser fehlschlagen, wird das Ergebnis der Selektoren von jQuery ($ ('...')) nie null oder undefiniert sein. Daher machen die Codevorschläge keinen Sinn. Benutze eine der anderen Antworten, sie machen mehr Sinn.


(2012) Update Weil die Menschen im Code suchen und diese Antwort ist ziemlich hoch oben in der Liste: Für die letzten paar Jahre, ich war diese kleine Plugin:

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

Ich denke, . $ ('div') jede() liest besser als $ ('div') Länge, plus Sie wird nicht so viel von Tippfehler leiden.. $ ('div') ayn() wird Geben Sie einen Laufzeitfehler, $ ('div'). Länge wird lautlos am meisten wahrscheinlich immer falsch.

__
Edits November 2012:

1) Weil die Menschen im Code suchen neigen und nicht lesen, was rund um den Code gesagt wird, habe ich zwei große Einschränkung Lektor Notizen zum angezeigten Code von Wolf.
2) Ich habe Code des kleinen Plugins hinzugefügt, das ich für diese Situation verwende.

+0

funktioniert nicht, also stimme ich für Ihre Antwort –

+2

@VovaPopov: Ich schlage vor, das nächste Mal nehmen Sie ein wenig mehr Zeit, um die Antwort zu lesen. Ich habe nur gesagt, dass das Codebeispiel "von Wolf" falsch war. Ich habe nie eine Antwort gegeben, ich habe mich nur auf einige der anderen Antworten bezogen, die mehr Sinn ergeben. – eleotlecram

+0

Gute Antwort. Es tut mir leid, dass die Leute es falsch interpretieren. –

1

Verwenden Sie $("#selector").get(0), um mit Null so zu überprüfen. get gibt das dom-Element zurück, bis dahin handelt es sich um ein Array, in dem Sie die length-Eigenschaft überprüfen müssen. Ich persönlich mag Länge nicht für Null-Behandlung, es verwirrt mich aus irgendeinem Grund :)

+0

Es ist interessant, wie verschiedene Leute anders denken; Ich denke, es macht mehr Sinn zu überprüfen, ob die Anzahl der Elemente Null ist, anstatt zu prüfen, ob das erste Element vorhanden ist. – Sam

4

In jQuery 1.4 erhalten Sie die $ .isEmptyObject-Funktion, aber wenn Sie gezwungen sind, eine ältere Version von jQ wie uns Armen zu verwenden Drupal-Entwickler stehlen nur diesen Code verwenden:

// 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:

console.log(isObjectEmpty(the_object)); // Returns true or false. 
+0

Dies geht nicht auf die Frage ein. – Sam

1

die Länge Eigenschaft verwenden Sie dies tun können.

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

Meinst du (das) .length> 0? – sage88

0

, wenn das Objekt dieser Fehler leer Rückkehr:
Uncaught Typeerror: kann Eigenschaft nicht lesen '0' von null
Ich versuche, diesen Code
try{ if ($("#btext" + i).length) {};
} catch(err){ if ($("#btext" + i).length) { //working this code if item not NULL }; }

1

Was ist mit "undefined" mit?

if (value != undefined){ // do stuff } 
Verwandte Themen