javascript - Hur man kontrollerar null-objekt i jQuery


Jag använder jQuery och jag vill kontrollera om ett element finns på min sida. Jag har skrivit följande kod, men det fungerar inte:

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

Hur kontrollerar jag om elementet finns?

Svar #1

Kolla jQuery FAQ...

Du kan använda length-egenskapen hos jQuery-samlingen som returneras av din selector:

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

Svar #2

(Eftersom jag verkar inte ha tillräckligt med rykte för att rösta ned svaret...)

Wolf skrev:

Att anropa length-egenskapen på undefined eller ett null-objekt kommer att få IE- och Webkit-webbläsare att misslyckas!

Prova istället detta:

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

eller

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

Även om det är sant att anrop av length-egenskapen på ett undefined eller null objekt kommer att få webbläsare att krasha, kommer resultatet av jQuerys selektorer (den $('...')) aldrig vara null eller undefined. Därför är kodförslagen meningslösa. Använd ett av de andra svaren, de är mer logiska.

(Uppdatering 2012) Eftersom folk tittar på kod och detta svar är ganska högt upp på listan: Under de senaste åren har jag använt detta lilla plugin:

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

Jag tycker $ ('div').any() ser bättre ut än $ ('div').length, plus att du inte kommer lida lika mycket av stavfel: $ ('div').ayn() kommer ge ett runtime-fel, $ ('div').lenght kommer troligen alltid att vara falskt utan att ge någon varning.

__
Redigeringar november 2012:

1) Eftersom människor tenderar att titta på koden och inte läsa vad som sägs kring koden, lade jag till två stora caveat lector-notiser till den citerade koden av Wolf.
2) Jag lade till koden för det lilla pluginet jag använder för denna situation.

Svar #3

Uppslagsfunktionen returnerar en array av matchande element. Du kan kontrollera om längden är noll. Observera ändringen att endast slå upp elementen en gång och återanvända resultaten efter behov.

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

Har du också försökt att bara använda textfunktionen - om inget element finns, kommer den inte göra någonting.

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

Svar #4

jquery $()-funktionen returnerar alltid ett icke-nullvärde - betyder att element matchade ditt selektorkriterium. Om elementet inte hittades kommer det att returnera en tom array. Så din kod kommer att se ut ungefär så här -

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

Relaterade artiklar