दिलचस्प पोस्ट
"आयात" के बाद "स्थिर" संशोधक क्या होता है? लाइन-लपेटें ढूँढना Chrome स्थानीय jQuery कुकीज़ क्यों अनदेखा करता है? एएससीआईआई कोड (0-255) को संबंधित वर्ण के स्ट्रिंग में कैसे परिवर्तित किया जाए? मैं एक पायथन मॉड्यूल को कैसे लोड करूँ? संपादन टेक्स्ट के लिए स्वत: सुझाव बंद करें? 'फॉर्म ग्रुप' से बाध्य नहीं किया जा सकता क्योंकि यह 'प्रपत्र' की ज्ञात संपत्ति नहीं है कैसे अक्षम कॉपी, कट, चुनें, सभी का चयन करें UITextView में क्या SQLite के लिए कोई .NET / C # wrapper है? क्या स्विफ्ट-आधारित एप्लिकेशन ओएस एक्स 10.9 / आईओएस 7 और कम पर काम करते हैं? IPhone पर एक NSString के लिए एईएस एन्क्रिप्शन PHP स्क्रिप्ट के कमांडलाइन बनाम http निष्पादन को निर्धारित करने के लिए वैधानिक तरीका क्या है? क्या कोई अच्छी प्राकृतिक भाषा प्रसंस्करण पुस्तकालय है स्ट्रिंग से एक क्लास का एक उदाहरण बनाएं कैसे व्यवहार में C + + लिंक काम करता है?

क्या jQuery के लिए एक "मौजूद" फ़ंक्शन है?

मैं jQuery में एक तत्व के अस्तित्व को कैसे देख सकता हूं?

मेरे पास वर्तमान कोड यह है:

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

क्या यह दृष्टिकोण करने के लिए एक और शानदार तरीका है? शायद एक प्लगइन या एक समारोह?

वेब के समाधान से एकत्रित समाधान "क्या jQuery के लिए एक "मौजूद" फ़ंक्शन है?"

जावास्क्रिप्ट में, सब कुछ 'सच्चाई' या 'फाल्सी' होता है, और संख्या 0 (और नाएनएन) के लिए false मतलब false , बाकी सब कुछ true । तो आप लिख सकते हैं:

 if ($(selector).length) 

आपको उस की आवश्यकता नहीं है >0 हिस्सा

हाँ!

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

यह इस पर प्रतिक्रिया में है: हेडिंग कोड पॉडकास्ट जेफ एटवुड के साथ

यदि आपने इस्तेमाल किया

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

आप यह समझेंगे कि चेनिंग संभव है जब यह नहीं है।

यह बेहतर होगा:

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

वैकल्पिक रूप से, सामान्य प्रश्न से :

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

आप निम्न का भी उपयोग कर सकते हैं यदि jQuery ऑब्जेक्ट सरणी में कोई मान नहीं है तो सरणी में पहली वस्तु प्राप्त करना अनिर्धारित होगा।

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

आप इसका उपयोग कर सकते हैं:

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

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

अस्तित्व की जांच करने के लिए सबसे तेजी से और सबसे अधिक शब्दार्थ स्वयं को सादे जावास्क्रिप्ट का प्रयोग करके वास्तव में है:

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

यह jQuery की लंबाई विकल्प की तुलना में लिखने में थोड़ी देर है, लेकिन यह तेजी से क्रियान्वित करता है क्योंकि यह एक मूल जेएस विधि है।

और यह आपके अपने jQuery फ़ंक्शन को लिखने के विकल्प से बेहतर है। यह विकल्प धीमी है, क्योंकि स्नोवर ने कहा है। लेकिन यह अन्य प्रोग्रामर्स को यह भी इंप्रेशन देगा कि मौजूद () फ़ंक्शन, jQuery के निहित कुछ है। जावास्क्रिप्ट / अपने कोड को संपादित करने वाले अन्य लोगों द्वारा समझा जाना चाहिए, बिना बढ़े हुए ज्ञान ऋण के।

NB: element_id से पहले '#' की कमी की सूचना दें (चूंकि यह सादे जेएस है, न कि jQuery)।

आप लिखकर कुछ बाइट्स बचा सकते हैं:

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

यह काम करता है क्योंकि प्रत्येक jQuery ऑब्जेक्ट भी सरणी के रूप में दिखती हैं, इसलिए हम सरणी से पहले आइटम प्राप्त करने के लिए सरणी डीरेंसिंग ऑपरेटर का उपयोग कर सकते हैं। यह निर्दिष्ट निर्देशांक पर कोई वस्तु नहीं है, तो undefined होता है।

आप उपयोग कर सकते हैं:

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

थोड़ा और अधिक सुंदर, शायद

यदि इस प्लगइन का उपयोग if if ($(ele).exist()) { /* DO WORK */ } या कॉलबैक का उपयोग करते हुए किया जा सकता है

लगाना

 ;;(function($) { if (!$.exist) { $.extend({ exist: function() { var ele, cbmExist, cbmNotExist; if (arguments.length) { for (x in arguments) { switch (typeof arguments[x]) { case 'function': if (typeof cbmExist == "undefined") cbmExist = arguments[x]; else cbmNotExist = arguments[x]; break; case 'object': if (arguments[x] instanceof jQuery) ele = arguments[x]; else { var obj = arguments[x]; for (y in obj) { if (typeof obj[y] == 'function') { if (typeof cbmExist == "undefined") cbmExist = obj[y]; else cbmNotExist = obj[y]; } if (typeof obj[y] == 'object' && obj[y] instanceof jQuery) ele = obj[y]; if (typeof obj[y] == 'string') ele = $(obj[y]); } } break; case 'string': ele = $(arguments[x]); break; } } } if (typeof cbmExist == 'function') { var exist = ele.length > 0 ? true : false; if (exist) { return ele.each(function(i) { cbmExist.apply(this, [exist, ele, i]); }); } else if (typeof cbmNotExist == 'function') { cbmNotExist.apply(ele, [exist, ele]); return ele; } else { if (ele.length <= 1) return ele.length > 0 ? true : false; else return ele.length; } } else { if (ele.length <= 1) return ele.length > 0 ? true : false; else return ele.length; } return false; } }); $.fn.extend({ exist: function() { var args = [$(this)]; if (arguments.length) for (x in arguments) args.push(arguments[x]); return $.exist.apply($, args); } }); } })(jQuery); 

jsFiddle

आप एक या दो कॉलबैक निर्दिष्ट कर सकते हैं। अगर तत्व अस्तित्व में है तो पहले एक आग लगाएगा, दूसरा तत्व तब अस्त होगा जब तत्व मौजूद नहीं होगा । हालांकि, यदि आप केवल एक फ़ंक्शन को पारित करना चुनते हैं, तो यह केवल तभी होगा जब तत्व मौजूद होगा। इस प्रकार, यदि चयनित तत्व मौजूद नहीं है तो श्रृंखला मर जाएगी। बेशक, यदि यह अस्तित्व में है, तो पहला समारोह आग होगा और श्रृंखला जारी रहेगी।

ध्यान रखें कि कॉलबैक संस्करण का उपयोग करने के लिए चेनिलिटी को बनाए रखने में मदद करता है – तत्व वापस कर दिया जाता है और आप किसी भी अन्य jQuery विधि के साथ कमांड को जारी रख सकते हैं!

उदाहरण का उपयोग करता है

 if ($.exist('#eleID')) { /* DO WORK */ } // param as STRING if ($.exist($('#eleID'))) { /* DO WORK */ } // param as jQuery OBJECT if ($('#eleID').exist()) { /* DO WORK */ } // enduced on jQuery OBJECT $.exist('#eleID', function() { // param is STRING && CALLBACK METHOD /* DO WORK */ /* This will ONLY fire if the element EXIST */ }, function() { // param is STRING && CALLBACK METHOD /* DO WORK */ /* This will ONLY fire if the element DOES NOT EXIST */ }) $('#eleID').exist(function() { // enduced on jQuery OBJECT with CALLBACK METHOD /* DO WORK */ /* This will ONLY fire if the element EXIST */ }) $.exist({ // param is OBJECT containing 2 key|value pairs: element = STRING, callback = METHOD element: '#eleID', callback: function() { /* DO WORK */ /* This will ONLY fire if the element EXIST */ } }) 

JQuery के लिए वास्तव में कोई ज़रूरत नहीं है सादे जावास्क्रिप्ट के साथ यह जांचना आसान और अर्थपूर्ण रूप से सही है:

 if(document.getElementById("myElement")) { //Do something... } 

यदि किसी भी कारण से आप तत्व को आईडी डालना नहीं चाहते हैं, तो आप DOM तक पहुंचने के लिए डिज़ाइन की गई किसी भी अन्य JavaScript विधि का उपयोग कर सकते हैं।

jQuery वास्तव में अच्छा है, लेकिन शुद्ध जावास्क्रिप्ट विस्मरण में मत देना …

पिछले सभी उत्तरों की वजह से .length पैरामीटर की आवश्यकता होती है कि वे ज्यादातर jquery $() चयनकर्ता का उपयोग करते हैं, जिसमें क्वेरीस-चयनकर्ता हैं, पर्दे के पीछे सभी (या वे इसे सीधे उपयोग कर रहे हैं)। यह विधि बहुत धीमी है क्योंकि उसे उस चयनकर्ता से सभी मैचों की तलाश में पूरे डोम पेड़ को पार्स करने और उनके साथ एक सरणी बनाने की आवश्यकता होती है।

['लम्बाई'] पैरामीटर की जरूरत नहीं है या उपयोगी नहीं है और यदि आप सीधे document.querySelector(selector) उपयोग करते हैं, तो कोड बहुत तेज़ हो जाएगा, क्योंकि इसके बजाय यह पहला तत्व देता है जो मेल नहीं खाता है या नल नहीं मिला है।

 function elementIfExists(selector){ //named this way on purpose, see below return document.querySelector(selector); } /* usage: */ var myelement = elementIfExists("#myid") || myfallbackelement; 

हालांकि इस पद्धति से हमें वास्तविक वस्तु वापस लौटाया जाता है; जो ठीक है अगर यह चर के रूप में सहेजा नहीं जा रहा है और बार-बार उपयोग किया जाता है (इस प्रकार इस संदर्भ को ध्यान में रखते हुए अगर हम भूल जाते हैं)।

 var myel=elementIfExists("#myid"); // now we are using a reference to the element which will linger after removal myel.getParentNode.removeChild(myel); console.log(elementIfExists("#myid")); /* null */ console.log(myel); /* giant table lingering around detached from document */ myel=null; /* now it can be garbage collected */ 

कुछ मामलों में यह वांछित हो सकता है इसका उपयोग इस तरह के लूप में किया जा सकता है:

 /* locally scoped myel gets garbage collected even with the break; */ for (var myel; myel = elementIfExist(sel); myel.getParentNode.removeChild(myel)) if (myel == myblacklistedel) break; 

यदि आपको वास्तव में तत्व की आवश्यकता नहीं है और केवल एक सच्चा / झूठा प्राप्त / स्टोर करना चाहते हैं, तो बस इसे दोबारा न दो !! यह जूते जो कि खुलने के लिए काम करता है, तो यहां क्यों गाँठ है?

 function elementExists(selector){ return !!document.querySelector(selector); } /* usage: */ var hastables = elementExists("table"); /* will be true or false */ if (hastables){ /* insert css style sheet for our pretty tables */ } setTimeOut(function (){if (hastables && !elementExists("#mytablecss")) alert("bad table layouts");},3000); 

आप इसका उपयोग कर सकते हैं:

 jQuery.fn.extend({ exists: function() { return this.length } }); if($(selector).exists()){/*do something*/} 

मैंने पाया है if ($(selector).length) {} अपर्याप्त होने के लिए selector एक खाली वस्तु {} यह चुपचाप अपने ऐप को तोड़ देगा।

 var $target = $({}); console.log($target, $target.length); // Console output: // ------------------------------------- // [▼ Object ] 1 // ► __proto__: Object 

मेरा एकमात्र सुझाव है कि {} लिए अतिरिक्त चेक करना है

 if ($.isEmptyObject(selector) || !$(selector).length) { throw new Error('Unable to work with the given selector.'); } 

मैं अभी भी एक बेहतर समाधान की तलाश कर रहा हूं, हालांकि यह थोड़ा सा भारी है।

संपादित करें: चेतावनी! यह IE में काम नहीं करता है जब selector एक स्ट्रिंग है

 $.isEmptyObject('hello') // FALSE in Chrome and TRUE in IE 

क्या $ है। () जो आप चाहते हैं?

jQuery.contains (कंटेनर, निहित)

$। सम्मिलित () विधि सत्य रिटर्न करती है यदि द्वितीय तर्क द्वारा प्रदान की गई DOM तत्व पहली तर्क द्वारा प्रदान किए गए DOM तत्व का वंशज है, चाहे वह एक प्रत्यक्ष बच्चा है या अधिक गहराई से है अन्यथा, यह गलत देता है। केवल तत्व नोड्स समर्थित हैं; अगर दूसरी तर्क एक पाठ या टिप्पणी नोड है, $। शामिल है () झूठी वापसी करेगा।

नोट : पहली तर्क एक DOM तत्व होना चाहिए, नहीं एक jQuery ऑब्जेक्ट या सादे जावास्क्रिप्ट ऑब्जेक्ट।

आप देख सकते हैं कि तत्व मौजूद है या जावा स्क्रिप्ट में लंबाई का उपयोग नहीं कर रहा है। यदि लम्बाई शून्य से अधिक है तो लंबाई मौजूद है यदि लंबाई शून्य है तो तत्व मौजूद नहीं है

 // These by Id if( $('#elementid').length > 0){ // Element is Present }else{ // Element is not Present } // These by Class if( $('.elementClass').length > 0){ // Element is Present }else{ // Element is not Present } 
 $(selector).length && //Do something 

मुझे लगता है कि अधिकांश उत्तर यहां दिए गए हैं, जैसा वे सही नहीं हैं, वे तत्व की लंबाई की जांच करते हैं, कई मामलों में ठीक हो सकता है, लेकिन 100% नहीं, कल्पना कीजिए कि संख्या फ़ंक्शन के बजाय पारित होती है, इसलिए मैं एक फ़ंक्शन का प्रोटोटाइप करता हूं जो सभी की जांच करता है शर्तें और जवाब देना चाहिए जैसा कि यह होना चाहिए:

 $.fn.exists = $.fn.exists || function() { return !!(this.length && (this[0] instanceof HTMLDocument || this[0] instanceof HTMLElement)); } 

यह दोनों लंबाई और प्रकार की जांच करेगा, अब आप इसे इस तरह देख सकते हैं:

 $(1980).exists(); //return false $([1,2,3]).exists(); //return false $({name: 'stackoverflow', url: 'http://www.stackoverflow.com'}).exists(); //return false $([{nodeName: 'foo'}]).exists() // returns false $('div').exists(); //return true $('.header').exists(); //return true $(document).exists(); //return true $('body').exists(); //return true 

यह सभी उत्तरों के समान है, लेकिन इसका उपयोग क्यों नहीं किया जा सकता ! ऑपरेटर दो बार ताकि आप एक बूलियन प्राप्त कर सकें:

 jQuery.fn.exists = function(){return !!this.length}; if ($(selector).exists()) { // the element exists, now what?... } 

DOM तत्व के लिए परीक्षण का प्रयास करें

 if (!!$(selector)[0]) // do stuff 

हायवे के उत्तर से प्रेरित होकर मैं निम्नलिखित के साथ आया हूं:

 $.fn.exists = function() { return $.contains( document.documentElement, this[0] ); } 

jQuery.contains दो DOM तत्व लेता है और जांचता है कि क्या पहले एक दूसरे वाला है।

document.documentElement एलेमेंट का उपयोग पहले तर्क के रूप में exists विधि के शब्दों को पूरा करता exists जब हम इसे केवल वर्तमान दस्तावेज़ में एक तत्व के अस्तित्व की जांच करने के लिए लागू करना चाहते हैं।

नीचे, मैंने एक स्निपेट डाल दिया है जो कि $(sel)[0] और $(sel).length दृष्टिकोण जो दोनों $(4).exists() मान लौटते हैं जबकि $(4).exists() false रिटर्न देता false । डीओएम में एक तत्व के अस्तित्व की जांच के संदर्भ में यह वांछित परिणाम लगता है।

 $.fn.exists = function() { return $.contains(document.documentElement, this[0]); } var testFuncs = [ function(jq) { return !!jq[0]; }, function(jq) { return !!jq.length; }, function(jq) { return jq.exists(); }, ]; var inputs = [ ["$()",$()], ["$(4)",$(4)], ["$('#idoexist')",$('#idoexist')], ["$('#idontexist')",$('#idontexist')] ]; for( var i = 0, l = inputs.length, tr, input; i < l; i++ ) { input = inputs[i][1]; tr = "<tr><td>" + inputs[i][0] + "</td><td>" + testFuncs[0](input) + "</td><td>" + testFuncs[1](input) + "</td><td>" + testFuncs[2](input) + "</td></tr>"; $("table").append(tr); } 
 td { border: 1px solid black } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="idoexist">#idoexist</div> <table style> <tr> <td>Input</td><td>!!$(sel)[0]</td><td>!!$(sel).length</td><td>$(sel).exists()</td> </tr> </table> <script> $.fn.exists = function() { return $.contains(document.documentElement, this[0]); } </script> 

मुझे एक ऐसा मामला था जहां मैं देखना चाहता था कि कोई वस्तु दूसरे के अंदर मौजूद है, इसलिए मैंने चयनकर्ता के अंदर चयनकर्ता की जांच के लिए पहले जवाब में कुछ जोड़ा।

 // Checks if an object exists. // Usage: // // $(selector).exists() // // Or: // // $(selector).exists(anotherSelector); jQuery.fn.exists = function(selector) { return selector ? this.find(selector).length : this.length; }; 

मैं ऐसा करने के लिए सादे वैनिला जावास्क्रिप्ट का उपयोग करना चाहता हूं।

 function isExists(selector){ return document.querySelectorAll(selector).length>0; } 

कैसा रहेगा:

 function exists(selector) { return $(selector).length; } if (exists(selector)) { // do something } 

यह बहुत कम है और बचाता है आपको चयनकर्ता को $() हर बार जोड़ना पड़ता है

मैं इस प्रश्न पर ठोकर खाई और मैं वर्तमान में इसका उपयोग करने वाले कोड का स्निपेट साझा करना चाहता हूं:

 $.fn.exists = function(callback) { var self = this; var wrapper = (function(){ function notExists () {} notExists.prototype.otherwise = function(fallback){ if (!self.length) { fallback.call(); } }; return new notExists; })(); if(self.length) { callback.call(); } return wrapper; } 

और अब मैं इस तरह से कोड लिख सकता हूँ –

 $("#elem").exists(function(){ alert ("it exists"); }).otherwise(function(){ alert ("it doesn't exist"); }); 

यह बहुत सारे कोड लग सकता है, लेकिन जब CoffeeScript में लिखा जाता है तो यह काफी छोटा है:

 $.fn.exists = (callback) -> exists = @length callback.call() if exists new class otherwise: (fallback) -> fallback.call() if not exists 

किसी तत्व के अस्तित्व की जांच करने के लिए आधिकारिक jQuery वेबसाइट में बड़े करीने से प्रलेखित किया गया है!

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

 if ($("#myDiv").length) { $("#myDiv").show(); } 

ध्यान दें कि यह हमेशा परीक्षण करने के लिए आवश्यक नहीं है कि कोई तत्व मौजूद है या नहीं। अगर यह मौजूद है, तो निम्न कोड तत्व दिखाएगा, और ऐसा नहीं करेगा (कुछ त्रुटियों के साथ) ऐसा न करें:

 $("#myDiv").show(); 

मैं इसका उपयोग कर रहा हूं:

  $.fn.ifExists = function(fn) { if (this.length) { $(fn(this)); } }; $("#element").ifExists( function($this){ $this.addClass('someClass').animate({marginTop:20},function(){alert('ok')}); } ); 

श्रृंखला का निष्पादन केवल अगर एक jQuery तत्व मौजूद है – http://jsfiddle.net/andres_314/vbNM3/2/

JQuery के लिए कोई ज़रूरत नहीं है

 if(document.querySelector('.a-class')) { // do something } 
 if ( $('#myDiv').size() > 0 ) { //do something } 

size() चयनकर्ता द्वारा दिए गए तत्वों की संख्या की गणना करता है

यहां jQuery में मेरी पसंदीदा exist विधि है

 $.fn.exist = function(callback) { return $(this).each(function () { var target = $(this); if (this.length > 0 && typeof callback === 'function') { callback.call(target); } }); }; 

और अन्य संस्करण जो कॉलबैक का समर्थन करता है, जब चयनकर्ता मौजूद नहीं होता है

 $.fn.exist = function(onExist, onNotExist) { return $(this).each(function() { var target = $(this); if (this.length > 0) { if (typeof onExist === 'function') { onExist.call(target); } } else { if (typeof onNotExist === 'function') { onNotExist.call(target); } } }); }; 

उदाहरण:

 $('#foo .bar').exist( function () { // Stuff when '#foo .bar' exists }, function () { // Stuff when '#foo .bar' does not exist } ); 

$("selector" ) एक ऑब्जेक्ट दे जो length डेटा है। यदि आप चयनकर्ता में परिभाषित किए गए तत्व हैं, तो आप उन्हें ऑब्जेक्ट से प्राप्त करेंगे। इसलिए यदि आप इसकी लंबाई की जांच करते हैं तो आप सभी मिल सकते हैं, कोई तत्व मौजूद है। जावास्क्रिप्ट 0 == false भी null == false यदि आपको नहीं मिलता है तो आपके कोड चलेंगे।

 if($("selector").length){ //code in the case } 

हाँ ऐसा करने का सबसे अच्छा तरीका:

JQuery द्वारा:

 if($("selector").length){ //code in the case } 

selector Element ID या Element Class

या

यदि आप jQuery लाइब्रेरी का उपयोग नहीं करना चाहते हैं, तो आप इसे कोर JavaScript का उपयोग कर प्राप्त कर सकते हैं:

JavaScript द्वारा:

 if(document.getElementById("ElementID")) { //Do something... }