JQuery में अशक्त वस्तुओं की जांच कैसे करें


169

मैं jQuery का उपयोग कर रहा हूं और मैं अपने पृष्ठ में एक तत्व के अस्तित्व की जांच करना चाहता हूं। मैंने निम्नलिखित कोड लिखा है, लेकिन यह काम नहीं कर रहा है:

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

मैं तत्व के अस्तित्व की जांच कैसे करूं?

जवाबों:


251

JQuery के FAQ की जाँच करें ...

आप अपने चयनकर्ता द्वारा लौटाए गए jQuery संग्रह की लंबाई संपत्ति का उपयोग कर सकते हैं:

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

आप var _myDiv = $ ('# myDiv') के बारे में क्या सोचते हैं; ... .... अगर (_myDiv.lenght) {...} अपवाद का उत्पादन करें।
नूरी YILMAZ

1
जैसा कि एलोटलेकराम ने कहा; बेहतर परहेज .length
numediaweb

5
@AurelianoBuendia, आप के lenghtबजाय इस्तेमाल किया है length; यह एक वर्तनी त्रुटि है।
सैम

4
@numediaweb, eleotlecram ने बचने के लिए नहीं कहा .length
सैम

1
लेकिन .. क्या आपको "null की संपत्ति 'लंबाई नहीं पढ़ सकता" त्रुटि?
सगिव एसईओ

61

(क्योंकि मुझे जवाब देने के लिए पर्याप्त प्रतिष्ठा नहीं है ...)

भेड़िया ने लिखा:

अपरिभाषित या अशक्त वस्तु पर लंबाई की संपत्ति को कॉल करने से IE और वेबकिट ब्राउज़र विफल हो जाएंगे!

इसके बजाय यह प्रयास करें:

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

या

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

हालांकि यह सच है कि अनिर्धारित या अशक्त वस्तु पर लंबाई की संपत्ति को कॉल करने से ब्राउज़र विफल हो जाएंगे, jQuery के चयनकर्ताओं ($ ('...') का परिणाम कभी भी अशक्त या अपरिभाषित नहीं होगा । इस प्रकार कोड के सुझावों का कोई मतलब नहीं है। अन्य उत्तरों में से एक का उपयोग करें, वे अधिक समझ में आते हैं।


(अपडेट 2012) क्योंकि लोग कोड को देखते हैं और यह उत्तर सूची में बहुत ऊपर है: पिछले कुछ वर्षों से, मैं इस छोटे प्लगइन का उपयोग कर रहा हूं:

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

मुझे लगता है कि $ ('div')। कोई भी () $ ('div') की तुलना में बेहतर पढ़ता है । लंबाई , इसके अलावा आप टाइपोस से बहुत अधिक पीड़ित होंगे: $ ('div')। ayn () एक रनटाइम त्रुटि देगा। , $ ('div')। lenght चुपचाप सबसे अधिक संभावना है कि हमेशा झूठा होगा।

__
संपादन २०१२:

1) क्योंकि लोग कोड को देखते हैं और यह नहीं पढ़ते हैं कि कोड के आसपास क्या कहा गया है, मैंने दो बड़े कैविटी लेक्टर नोट भेड़िया के उद्धृत कोड में जोड़े।
2) मैंने इस स्थिति के लिए उपयोग किए जाने वाले छोटे प्लगइन का कोड जोड़ा।


2
@VovaPopov: मेरा सुझाव है कि अगली बार जब आप उत्तर को पढ़ने के लिए थोड़ा और समय लें। मैं केवल यह कह रहा था कि "वुल्फ द्वारा" कोड उदाहरण गलत था। मैंने कभी कोई जवाब नहीं दिया, सिर्फ कुछ अन्य जवाबों का हवाला दिया, जो ज्यादा मायने रखते हैं।
११:२५ बजे एलोटलक्रैम

अच्छा उत्तर। मुझे खेद है कि लोग इसकी गलत व्याख्या कर रहे हैं।
जो सीमन्स

14

लुकअप फ़ंक्शन मिलान तत्वों की एक सरणी देता है। आप जाँच सकते हैं कि लंबाई शून्य है। केवल एक बार तत्वों को देखने के लिए परिवर्तन पर ध्यान दें और आवश्यकतानुसार परिणामों का पुन: उपयोग करें।

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

इसके अलावा, क्या आपने केवल पाठ फ़ंक्शन का उपयोग करने की कोशिश की है - यदि कोई तत्व मौजूद नहीं है, तो यह कुछ भी नहीं करेगा।

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

7
0 एक गलत मान है, इसलिए elem.length अभिव्यक्ति गलत का मूल्यांकन करती है - दूसरे शब्दों में, '=!' भाग के लिए कोई आवश्यकता नहीं है
जेम्स

2
@ 999, मुझे लगता है कि शून्य के खिलाफ चेक कोड को अधिक पठनीय बनाता है, हालांकि दोनों तरीके संभवत: किसी ऐसे व्यक्ति के लिए पठनीय हैं जो भाषाओं को स्क्रिप्ट करने के लिए उपयोग करते हैं।
सैम

12

jquery $ () फ़ंक्शन हमेशा गैर शून्य मान लौटाता है - मतलब तत्व आपको चयनकर्ता क्रेटारिया से मेल खाते हैं। यदि तत्व नहीं मिला, तो यह एक खाली सरणी लौटाएगा। तो आपका कोड कुछ इस तरह दिखेगा -

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

1
मुझे नहीं लगता कि यह सच है कि $ () एक सरणी देता है। jQuery की वस्तुओं में ऐसे व्यवहार होते हैं जो सरणियों के समान होते हैं, लेकिन मुझे नहीं लगता कि वे वास्तव में सरणियां हैं, और मुझे लगता है कि आप पाएंगे कि उनके व्यवहार के सभी सरणियों के समान नहीं हैं। इस त्वरित प्रदर्शन को देखें ।
सैम

5

JQuery 1.4 में आपको $ .isEmptyObject फ़ंक्शन मिलता है, लेकिन यदि आप jQ के पुराने संस्करण का उपयोग करने के लिए हमें मजबूर करते हैं, जैसे कि गरीब Drupal डेवलपर्स तो बस इस कोड का उपयोग करें चोरी करते हैं:

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

इसका उपयोग करें जैसे:

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

यह प्रश्न को संबोधित नहीं करता है।
सैम

5

कोई फर्क नहीं पड़ता कि आप जो चयन करते हैं वह फ़ंक्शन $()हमेशा एक jQuery ऑब्जेक्ट देता है ताकि परीक्षण करने के लिए उपयोग नहीं किया जा सके। सबसे अच्छा तरीका अभी तक (यदि केवल नहीं है) size()फ़ंक्शन या देशी लंबाई संपत्ति का उपयोग करना है जैसा कि ऊपर बताया गया है।

if ( $('selector').size() ) {...}                   

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

JQuery ऑब्जेक्ट जो सभी देशी jQuery के तरीकों से लौटा है वह एक सरणी नहीं है, यह कई गुणों वाली एक वस्तु है; उनमें से एक "लंबाई" संपत्ति है। आप आकार की जांच भी कर सकते हैं () या प्राप्त (0) या प्राप्त () - 'get (0)' पहले तत्व तक पहुंचने के समान काम करता है, यानी $ (elem) [0]



1

$("#selector").get(0)अशक्त की तरह जांच करने के लिए उपयोग करें। प्रमुख तत्व प्राप्त करें, तब तक आप एक सरणी से निपटते हैं, जहां आपको लंबाई की संपत्ति की जांच करने की आवश्यकता होती है। मैं व्यक्तिगत रूप से नल से निपटने के लिए लंबाई की जांच पसंद नहीं है, यह मुझे किसी कारण के लिए भ्रमित करता है :)


यह दिलचस्प है जिस तरह से अलग-अलग लोग अलग-अलग सोचते हैं; मुझे लगता है कि पहले तत्व मौजूद है या नहीं, यह जाँचने के लिए कि तत्वों की संख्या शून्य है या नहीं, यह जाँचने के लिए अधिक समझ में आता है।
सैम

1

लंबाई संपत्ति का उपयोग करके आप ऐसा कर सकते हैं।

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

2
क्या आपका मतलब है (यह) .length> 0?
ऋषि 88

0

जब वस्तु खाली हो तो यह त्रुटि वापस करें:

Uncaught TypeError: Cannot read property '0' of null

मैं इस कोड की कोशिश करता हूं:

try{
  if ($("#btext" + i).length) {};               
}catch(err){
  if ($("#btext" + i).length) {
     //working this code if the item, not NULL 
   }
}


-7

अपरिभाषित या अशक्त वस्तु पर लंबाई की संपत्ति को कॉल करने से IE और वेबकिट ब्राउज़र विफल हो जाएंगे!

इसके बजाय यह प्रयास करें:

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

या

if($("#something") === null){
  // don't do something
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.