JQuery জন্য একটি "বিদ্যমান" ফাংশন আছে?


2778

আমি কীভাবে jQuery এ কোনও উপাদানটির অস্তিত্ব পরীক্ষা করতে পারি?

আমার কাছে বর্তমান কোডটি হ'ল:

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

এর কাছে যাওয়ার আরও কি আরও সুন্দর উপায় আছে? সম্ভবত একটি প্লাগইন বা একটি ফাংশন?

উত্তর:


2487

জাভাস্ক্রিপ্টে, সমস্ত কিছু 'সত্যবাদী' বা 'মিথ্যাবাদী' এবং সংখ্যার জন্য 0(এবং এনএএন ) অর্থ false, সমস্ত কিছু true। সুতরাং আপনি লিখতে পারেন:

if ($(selector).length)

আপনার সেই >0অংশের দরকার নেই ।


52
@ abhirathore2006 আপনি যদি কোনও আইডি নির্বাচক ব্যবহার করেন এবং উপাদানটির অস্তিত্ব না থাকে তবে দৈর্ঘ্য 0 হয় এবং ব্যতিক্রম ছোঁড়ে না।
রবার্ট

14
মজার বিষয় যথেষ্ট NaN != false
রবার্ট

35
@ রবার্ট এবং [] + []= ""... আহ আমি জাভাস্ক্রিপ্ট পছন্দ করি
জেমস

9
@ জেমস এটি কারণ [].toString() === [].join(',') === ""এবং "" === ""
ইসমাইল মিগুয়েল

5
@ রবার্ট এবংtypeof NaN == 'number'
অরিয়াদাম

1356

হ্যাঁ!

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

if ($(selector).exists()) {
    // Do something
}

এটির প্রতিক্রিয়া: জেফ আতউডের সাথে হার্ডিং কোড পডকাস্ট


254
আমি কেবল লিখছি: যদি ($ (নির্বাচক)। দৈর্ঘ্য) {...} '> 0' ছাড়াই
vsync

369
আপনার $.fn.existsউদাহরণটি দুটি ফাংশন কলগুলির সাথে একটি সম্পত্তি অনুসন্ধান (সস্তা!) প্রতিস্থাপন করছে - যা অনেক বেশি ব্যয়বহুল — এবং এই ফাংশন কলগুলির মধ্যে একটি আপনার কাছে ইতিমধ্যে থাকা একটি jQuery অবজেক্টটিকে পুনরায় তৈরি করে, যা কেবল নিরীহ।
সি Snover

212
@ রেডস্কয়ার: jQuery এ এই ধরণের ফাংশন যুক্ত করার জন্য কোড পাঠযোগ্যতা হ'ল সর্বোত্তম যুক্তি ration যাকে বলে কিছু .existsপরিষ্কার পরিচ্ছন্নভাবে পড়ে, যদিও .lengthশব্দার্থকগুলি অভিন্ন ফলাফলের সাথে মিল থাকলেও শব্দার্থগতভাবে আলাদা কিছু হিসাবে পড়ে।
বেন জোটটো

48
@ কিক্সোটো, দুঃখিত তবে। দৈর্ঘ্য অনেকগুলি ভাষা জুড়ে এমন একটি স্ট্যান্ডার্ড যা মোড়ানোর প্রয়োজন হয় না। আপনি কিভাবে দৈর্ঘ্যের ব্যাখ্যা করবেন?
redsquare

144
আমার মতে, এটি "উপাদানটির জন্য আমি নির্বাচক লিখেছি" এর ধারণার কাছে "শূন্যের চেয়ে বড় একটি তালিকার দৈর্ঘ্য" ধারণা থেকে কমপক্ষে একটি যৌক্তিক দিকনির্দেশনা। হ্যাঁ, তারা প্রযুক্তিগতভাবে একই জিনিস, কিন্তু ধারণাগত বিমূর্তিটি একটি ভিন্ন স্তরে। এটি কিছু লোককে আরও কিছু কর্মক্ষমতা ব্যয় করে আরও সুস্পষ্ট সূচককে পছন্দ করে তোলে।
বেন জোটটো

377

আপনি যদি ব্যবহার

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 */ }

11
প্রথম পদ্ধতিটি আরও ভাল করে পড়ে। "(" a ")। উপস্থিত আছে ()" যদি <a> উপাদান উপস্থিত থাকে "হিসাবে পড়ে। ex। উপস্থিতি ("ক") হিসাবে "যদি উপস্থিত থাকে <a> উপাদানগুলি।"
স্টারগার

16
সত্য তবে আবার, আপনি বোঝাচ্ছেন যে শৃঙ্খলা সম্ভব is * (
জন এরিকসন

19
ইতিমধ্যে এমন পদ্ধতি রয়েছে যা চেইনযোগ্য নয়, যেমন অ্যাটর এবং ডেটা ফাংশন। আমি আপনার পয়েন্টটি দেখতে পাচ্ছি এবং এটির জন্য মূল্য কী তা আমি কেবল দৈর্ঘ্য> 0 এর জন্য পরীক্ষা করি test
ম্যাথু ক্রামলে

39
কেন পৃথিবীতে আপনার এই শৃঙ্খলাবদ্ধ হতে হবে? $(".missing").css("color", "red")ইতিমধ্যে সঠিক জিনিসটি করেছে ... (অর্থাত্ কিছুই নেই)
বেন ব্লাক

15
চেইনিংয়ের জিনিসগুলি সম্পূর্ণ টোশ - এখানে প্রচুর পরিমাণে jQuery $.fnপদ্ধতি রয়েছে যা একটি নতুন jQuery অবজেক্ট ছাড়া অন্য কিছু ফিরিয়ে দেয় এবং তাই শৃঙ্খলিত হয় না।
Alnitak

136

আপনি এটি ব্যবহার করতে পারেন:

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

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

134
আপনি কি দেখেন নি যে 2 বছর আগে টিম বাথ ইতিমধ্যে এই উত্তর দিয়েছিল ?
থ 4 ট গাই

101
পিএফটি, টিম উপাদানটির অস্তিত্ব না থাকলে কীভাবে পরীক্ষা করবেন তা কখনই দেখাননি।
জেরেমি ডব্লিউ

1
আপনি জীবন "অন্য" মানে? আমার প্রশ্নটি হ'ল: ভুল, এটি অবশ্যই বিদ্যমান বা নির্বাচকটি মেলে না। দৈর্ঘ্য অতিরিক্তহীন।
রিচিএইচএইচ

26
এই উত্তর এবং মন্তব্যগুলি
স্ট্যাকওভারফ্লো

101

অস্তিত্বের জন্য যাচাইয়ের দ্রুত এবং সর্বাধিক শব্দার্থগতভাবে স্ব-ব্যাখ্যা করার উপায়টি হল সরল ব্যবহার করে JavaScript:

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

JQuery দৈর্ঘ্যের বিকল্পের চেয়ে লেখার জন্য এটি কিছুটা দীর্ঘ, তবে এটি একটি স্থানীয় জেএস পদ্ধতি হওয়ায় দ্রুত কার্যকর হয় utes

এবং এটি আপনার নিজের jQueryফাংশন লেখার বিকল্পের চেয়ে ভাল । এই বিকল্পটি ধীরে ধীরে, কারণ হিসাবে @ স্নোভার জানিয়েছে। তবে এটি অন্যান্য প্রোগ্রামারদেরও এই ধারণা দেয় যে exists()ফাংশনটি jQuery এর অন্তর্নিহিত কিছু। JavaScriptজ্ঞান increasedণ বৃদ্ধি না করে অন্যরা আপনার কোড সম্পাদনা করে / বুঝে নেওয়া উচিত।

এনবি: এর আগে '#' এর অভাব লক্ষ্য করুন element_id(যেহেতু এটি সাধারণ জেএস, না jQuery)।


56
পুরোপুরি একই জিনিস না। JQuery সিলেক্টরগুলি যে কোনও সিএসএস নিয়মের জন্য ব্যবহার করা যেতে পারে - উদাহরণস্বরূপ $('#foo a.special')। এবং এটি একাধিক উপাদানকে ফিরিয়ে দিতে পারে। getElementByIdযে কাছে যেতে শুরু করতে পারে না।
কিকিতো

7
আপনি এটি সঠিক যে এটি নির্বাচনকারীদের মতো বিস্তৃতভাবে প্রযোজ্য নয়। তবে এটি সবচেয়ে সাধারণ ক্ষেত্রে কাজটি বেশ ভালভাবে সম্পাদন করে (কোনও একক উপাদান উপস্থিত রয়েছে কিনা তা পরীক্ষা করে)। স্ব-ব্যাখ্যা এবং গতির যুক্তিগুলি এখনও দাঁড়িয়ে আছে।
ম্যাগনে

29
@ নোজ if(document.querySelector("#foo a.special"))কাজ করবে। কোন jQuery প্রয়োজন।
নীল আকাশ

34
জেএস ইঞ্জিনগুলিতে গতির যুক্তি কেবল সেই লোকের মনে মরে গেছে যারা jQuery ছাড়া কাজ করতে পারে না, কারণ এটি একটি যুক্তি যে তারা জিততে পারে না।
নীল আকাশ

22
আমাদের পুরানো দিনগুলি স্মরণ করুন যখন ডকুমেন্ট.জেটলেমেন্টবিআইআইডি সমস্ত ছিল আমাদের? এবং আমি সবসময় নথিটি ভুলে গেছি। এবং কেন এটি কাজ করে না তা বুঝতে পারল না। এবং আমি সর্বদা এটি ভুল বানান করেছিলাম এবং চরিত্রটি ভুলভাবে কেস করেছিলাম।
জাস্টজহান

73

আপনি লিখে কিছু বাইট সংরক্ষণ করতে পারেন:

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

এই কাজ কারণ প্রতিটি jQuery এর অবজেক্ট এছাড়াও masquerades একটি অ্যারে হিসাবে, তাই আমরা অ্যারে dereferencing অপারেটর ব্যবহার থেকে প্রথম আইটেম পেতে পারেন অ্যারেundefinedনির্দিষ্ট সূচকে কোনও আইটেম না থাকলে এটি ফিরে আসে ।


1
আমি এই সঠিক উত্তরটি পোস্ট করতে এখানে এসেছি ... বাধ্যতামূলক ফিডল: jsfiddle.net/jasonwilczak/ekjj80gy/2
জেসন উইলকজাক

3
@ জেসনওয়িলকজাক পরিবর্তে নয় কেন: .eq [0] বা। ফার্স্ট () টাইপ কাস্টিংয়ের পরিবর্তে পাওয়া প্রথম উপাদানটির বিষয়ে উল্লেখ করার জন্য মন্তব্য করুন?
জিন পল একেএ এল_ভেটি

5
না, jQuery.first()বা jQuery.eq(0)উভয়ই প্রত্যাবর্তনযোগ্য বস্তু, বস্তুগুলি খালি ইশ হলেও সত্যবাদী। এই উদাহরণটি ব্যাখ্যা করবে যে এই ফাংশনগুলি যেমন রয়েছে তেমন ব্যবহার করা যাবে না:if(jQuery("#does-not-exist").eq(0)) alert("#does-not-exist exists")
সালমান এ

1
সঠিক। .eq(0)আয় শুধু আরেকটি jQuery এর অবজেক্ট দৈর্ঘ্য 1 সংক্ষিপ্ত বা 0. .first()জন্য শুধু একটি সুবিধার্থে পদ্ধতি .eq(0)। কিন্তু .get(0)প্রথম DOM উপাদান ফেরৎ বা undefinedএবং হিসাবে একই [0]। কোনও jQuery অবজেক্টের প্রথম ডোম উপাদানটি নিয়মিত অবজেক্ট প্রোপার্টি নাম সহ সঞ্চিত থাকে '0'। এটি একটি সাধারণ সম্পত্তি অ্যাক্সেস। একমাত্র প্রকারের ingালাইয়ের সংখ্যাটি 0স্ট্রিংয়ের সংখ্যার অন্তর্ভুক্ত রূপান্তর থেকে শুরু করে '0'। সুতরাং টাইপ কাস্টিং যদি সমস্যা হয় তবে আপনি তার $.find(selector)['0']পরিবর্তে ব্যবহার করতে পারেন ।
রবার্ট

66

তুমি ব্যবহার করতে পার:

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

একজন সামান্য আরো মার্জিত, সম্ভবত।


38
এটি এমন একটি সাধারণ জিনিসের জন্য খুব বেশি। টিম বাথের উত্তর দেখুন
vsync

এটা সঠিক উত্তর. 'দৈর্ঘ্য' পদ্ধতিতে সমস্যাটি রয়েছে যে এটি যে কোনও সংখ্যার সাথে মিথ্যা ধনাত্মক দেয়, উদাহরণস্বরূপ: $ (6 666) দৈর্ঘ্য // ফেরত 1, তবে এটি কোনও বৈধ নির্বাচক নয়
উপার্জন

এটি খুব সাধারণ কাজের জন্য অত্যন্ত ব্যয়বহুল। .Is () হলে কেবল jquery বাস্তবায়ন সন্ধান করুন এবং আপনি দেখতে পাবেন যে এই সাধারণ প্রশ্নের উত্তর দেওয়ার জন্য আপনার কতগুলি কোড প্রক্রিয়া করতে হবে। এছাড়াও আপনি ঠিক কী করতে চান তা স্পষ্ট নয়, সুতরাং এটি একই বা সম্ভবত কম মার্জিত হয় তবে প্রশ্নের সমাধান।
micropro.cz

1
@ আয়ারনাজ দুর্দান্ত পয়েন্ট, চমৎকার ধরা। যদিও আমি দেখতে পাচ্ছি না যে এটি আসলে একটি উপযুক্ত উদ্বেগ, যদিও। ডিভাইসগুলি সনাক্তকারী দেবগণের কোডগুলি ভাঙার 666সম্ভবত অন্যান্য প্রচুর কারণ রয়েছে। যদিও এটা একটি অবৈধ নির্বাচক হয়, $ (666) .length বৈধ জাভাস্ক্রিপ্ট হয় : এটা truthy মূল্যায়ণ, সেইজন্য এবং উচিত শর্ত সন্তুষ্ট।
টড

@earnaz যে নির্দিষ্ট ক্ষেত্রে এড়ানোর জন্য, $.find(666).lengthকাজ করে।
এমিল বার্গারন

66

এই প্লাগইনটি কলব্যাকের 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

আপনি এক বা দুটি কলব্যাক নির্দিষ্ট করতে পারেন। উপাদান উপস্থিত থাকলে প্রথমটি অগ্নিকাণ্ড করবে, দ্বিতীয়টি অস্তিত্ব না থাকলে আগুন নেবে fire তবে, আপনি যদি কেবল একটি ফাংশন পাস করতে চান, তবে উপাদানটি উপস্থিত থাকলে তা কেবল আগুনে ছড়িয়ে পড়ে। সুতরাং, নির্বাচিত উপাদানটি উপস্থিত না থাকলে চেইনটি মারা যাবে । অবশ্যই এটি উপস্থিত থাকলে প্রথম ফাংশনটি চালিত হবে এবং চেইনটি অবিরত থাকবে।

মনে রাখবেন যে কলব্যাক বৈকল্পিকটি ব্যবহার করা চেইনবিলিটি বজায় রাখতে সহায়তা করে - উপাদানটি ফিরে আসে এবং আপনি অন্য কোনও 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    */
    }
})

1
কলব্যাক সংস্করণে, Has Itemsকলব্যাকটি আসলে কোনও আর্গুমেন্ট হিসাবে আর্গুমেন্ট হিসাবে পাস করা উচিত নয় ?
ক্রিস মেরিসিক

62

আমি দেখতে পাচ্ছি এখানে বেশিরভাগ উত্তরগুলি যেমন হওয়া উচিত ঠিক তেমন সঠিক নয় , তারা উপাদান দৈর্ঘ্যটি পরীক্ষা করে, এটি অনেক ক্ষেত্রে ঠিক হতে পারে তবে 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

55

সত্যিই jQuery জন্য কোন প্রয়োজন নেই। সাধারণ জাভাস্ক্রিপ্টের সাহায্যে এটি পরীক্ষা করা সহজ এবং শব্দার্থগতভাবে সঠিক:

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

যদি কোনও কারণে আপনি উপাদানটিতে কোনও আইডি রাখতে চান না, আপনি এখনও ডিওএম অ্যাক্সেস করার জন্য ডিজাইন করা অন্য কোনও জাভাস্ক্রিপ্ট পদ্ধতি ব্যবহার করতে পারেন।

jQuery সত্যিই দুর্দান্ত, তবে খাঁটি জাভাস্ক্রিপ্টটি বিস্মৃত হতে দেবেন না ...


5
আমি জানি: এটি সরাসরি আসল প্রশ্নের উত্তর দেয় না (যা একটি জ্যাকুরি ফাংশন চেয়েছে), তবে সেক্ষেত্রে উত্তরটি "না" বা "কোনও শব্দার্থিকভাবে সঠিক সমাধান নয়" হবে।
অ্যামিপেলগ্রিনি

আপনার যদি পিতা বা মাতা নির্বাচকের দরকার হয় :has()?
Константин Ван

54

আপনি এটি ব্যবহার করতে পারেন:

jQuery.fn.extend({
    exists: function() { return this.length }
});

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

43

পূর্ববর্তী সমস্ত উত্তরগুলির .lengthপ্যারামিটারের প্রয়োজনীয়তার কারণ হ'ল তারা বেশিরভাগই $()জ্যাকুরির নির্বাচক ব্যবহার করছেন যাতে পর্দার পিছনে ক্যোয়ারী নির্বাচনকারী সব রয়েছে (বা তারা এটি সরাসরি ব্যবহার করছেন)। এই পদ্ধতিটি বরং ধীরে ধীরে কারণ এটির জন্য নির্বাচকের সাথে সমস্ত ম্যাচ সন্ধান করে এবং তাদের সাথে একটি অ্যারে তৈরি করে পুরো ডিওএম গাছকে বিশ্লেষণ করতে হবে

['দৈর্ঘ্য'] প্যারামিটারটির প্রয়োজন বা দরকারী নয় এবং কোডটি যদি আপনি 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);

40

আপনি $.contains()কি চান?

jQuery.contains( container, contained )

$.contains()পদ্ধতি ফেরৎ সত্য যদি দ্বিতীয় যুক্তি দ্বারা উপলব্ধ DOM উপাদান প্রথম আর্গুমেন্ট দ্বারা উপলব্ধ DOM উপাদান বংশধর হয়, তা সরাসরি সন্তান বা তার বেশি গভীরভাবে নেস্টেড। অন্যথায়, এটি মিথ্যা প্রত্যাবর্তন করে। কেবলমাত্র এলিমেন্ট নোডগুলি সমর্থিত; দ্বিতীয় যুক্তি যদি কোনও পাঠ্য বা মন্তব্য নোড হয় তবে $.contains()তা মিথ্যা হবে।

দ্রষ্টব্য : প্রথম যুক্তিটি অবশ্যই একটি ডিওএম উপাদান হতে হবে, কোনও জিকুয়েরি অবজেক্ট বা সরল জাভাস্ক্রিপ্ট অবজেক্ট নয়।


3
এটি কোনও নির্বাচককে গ্রহণ করে না, যার অর্থ তাকে এটি নির্বাচন করতে হবে, যার অর্থ তিনি কেবল তার নির্বাচনের ফলাফলটি পরীক্ষা করতে পারেন।

39

আমি 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.');
}

আমি এখনও আরও ভাল সমাধানের জন্য খুঁজছি যদিও এটি একরকম ভারী।

সম্পাদনা: সতর্কতা! যখন selectorস্ট্রিং হয় তখন এটি IE এ কাজ করে না ।

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

12
আপনি নিজেকে কতবার নিজেকে $()আর্গুমেন্ট হিসাবে খালি বস্তুর সাথে কল করতে দেখেন ?
nnnnnn

@nnnnnn আসলে কখনই নয় (আমি আর jQuery ব্যবহার করি না)। তবে আমার ধারণা 3 বছর আগে আমার কাছে এমন একটি এপিআই প্রকাশ করার একটি মামলা ছিল যা কোনও নির্বাচককে গ্রহণ করতে পারে এবং সেই নির্বাচকটির জন্য উপাদানগুলির সংখ্যা ফেরত দেয়। অন্য কোনও দেব যদি একটি খালি বস্তুতে পাস করে তবে এটি 1
ওলেগ

3
কেন পৃথিবীতে আপনি একটি খালি বস্তুটি পাস {}করবেন $()?
সমস্ত শ্রমিকরা

7
@ cpburnz আপনি আমাকে কেন জিজ্ঞাসা করেন? আমি কেবল একটি এপিআই সরবরাহকারী ছিলাম ... লোকেরা সমস্ত ধরণের বোকা জিনিস এপিআইগুলিতে দেয়।
ওলেগ

4
সবেমাত্র লক্ষ্য করা গেছে, @ ফাগনারব্র্যাকের রেফারেন্সযুক্ত জ্যাকারি ইস্যু থ্রেড তার মন্তব্যের পরেই আপডেট হয়েছিল; দেখে মনে হচ্ছে এটি শেষ হয়ে যাচ্ছে না।
জোসেফ গ্যাব্রিয়েল 21

38

আপনি জাভা স্ক্রিপ্টে দৈর্ঘ্যটি ব্যবহার করছেন বা ব্যবহার করছেন না তা পরীক্ষা করতে পারেন। দৈর্ঘ্য যদি শূন্যের চেয়ে বেশি হয় তবে দৈর্ঘ্য শূন্য হলে উপাদান উপস্থিত থাকে তবে উপাদান উপস্থিত থাকে না is

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

4
আপনার যদি আবহাওয়ার দৈর্ঘ্য 0 এর চেয়ে বেশি হয় তা পরীক্ষা করার দরকার নেই, যদি ($ ('# এলিমেন্টেড')। দৈর্ঘ্য)}} যথেষ্ট হবে।
প্রণব লাভে

13
আপনি আসলে প্রশ্নটি পড়েছেন? ওপি ঠিক একই পদ্ধতি ব্যবহার করছে।
আরপুন

34

কোনও উপাদানটির অস্তিত্বের জন্য অনুসন্ধান করা সরকারী jQuery ওয়েবসাইটে নিজেই ঝরঝরে ডকুমেন্টেড!

আপনার নির্বাচক দ্বারা ফেরত jQuery সংগ্রহের দৈর্ঘ্যের বৈশিষ্ট্যটি ব্যবহার করুন :

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

মনে রাখবেন যে কোনও উপাদান রয়েছে কিনা তা পরীক্ষা করা সবসময় প্রয়োজন হয় না। নিম্নলিখিত কোডটি বিদ্যমান থাকলে উপাদানটি প্রদর্শন করবে এবং যদি তা না থাকে তবে কিছুই না করে (কোনও ত্রুটি ছাড়াই):

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

31

এটি সমস্ত উত্তরগুলির সাথে খুব মিল, তবে কেন !অপারেটরটি দু'বার ব্যবহার করবেন না যাতে আপনি বুলিয়ান পান:

jQuery.fn.exists = function(){return !!this.length};

if ($(selector).exists()) {
    // the element exists, now what?...
}

2
কারণ Boolean(x)পারবেন কখনও কখনও আরও দক্ষ হোন।

28
$(selector).length && //Do something

19
আমি এমন 2 টি বাইটের দামে পাঠযোগ্যতার উন্নতি করতে পারে ifএমন কোনও ব্যবহারকে এড়িয়ে চলা এই ঘৃণ্য উপায়গুলি ঘৃণা করি if
এমিল বার্গারন

এছাড়াও, মিনিফায়ারগুলি আপনার &&জন্য এগুলি করবে।

27

DOMউপাদানটির জন্য পরীক্ষার চেষ্টা করুন

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

27

হাইওয়ের উত্তরে অনুপ্রাণিত হয়ে আমি নিম্নলিখিতগুলি নিয়ে এসেছি:

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

jQuery.contains দুটি ডোম উপাদান নেয় এবং প্রথমটিতে দ্বিতীয়টি রয়েছে কিনা তা পরীক্ষা করে।

document.documentElementপ্রথম আর্গুমেন্ট হিসাবে ব্যবহার করা এর শব্দার্থকে পরিপূর্ণ করেexists পদ্ধতিটির যখন আমরা বর্তমান নথিতে কোনও উপাদানটির অস্তিত্ব পরীক্ষা করতে এটি প্রয়োগ করতে চাই।

নীচে, আমি একসঙ্গে একটি স্নিপেট যে তুলনা রেখেছি jQuery.exists()বিরুদ্ধে $(sel)[0]এবং $(sel).lengthযা উভয় রিটার্ন পন্থা truthyমান $(4)যখন $(4).exists()আয় falseডোমটিতে কোনও উপাদানটির অস্তিত্বের জন্য যাচাই করার প্রসঙ্গে এটি পছন্দসই ফলাফল বলে মনে হয় ।


26

JQuery (বুনিয়াদি সমাধান) প্রয়োজন নেই

if(document.querySelector('.a-class')) {
  // do something
}

নীচে আরও অনেক পারফরম্যান্ট বিকল্প (কোনও শ্রেণির আগে ডটের অভাব লক্ষ্য করুন)।

if(document.getElementsByClassName('a-class')[0]) {
  // do something
}

ক্যোরিসারেক্টর jQuery এ matching () (সিজল) এর মতো উপযুক্ত ম্যাচিং ইঞ্জিন ব্যবহার করে এবং আরও বেশি কম্পিউটিং শক্তি ব্যবহার করে তবে 99% ক্ষেত্রে ঠিক জরিমানা করবে। দ্বিতীয় বিকল্পটি আরও স্পষ্ট এবং কোডটি ঠিক কী করতে হবে তা বলে। এটি jsperf অনুযায়ী অনেক দ্রুত https://jsperf.com/geteitionsbyclassname-vs-queryselectorall/25



23

আমি এই প্রশ্নটিতে হোঁচট খেয়েছি এবং আমি বর্তমানে ব্যবহার করা কোডের স্নিপেটটি ভাগ করতে চাই:

$.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");
});

এটি অনেকটা কোড মনে হতে পারে তবে কফিস্ক্রিপ্টে যখন লেখা হয় তখন তা বেশ ছোট থাকে:

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

9
আমি দেখতে পাই যে ওপির আসল পদ্ধতিটি কেবলমাত্র আরও ন্যূনতম নয় বরং এর চেয়ে মার্জিত হতে পারে। ওপির পদ্ধতিটি সংক্ষিপ্ত হয়ে গেলে এবং কলব্যাকগুলিতে জড়িত না হলে এই বেশি কোড লিখতে ওভারকিলের মতো মনে হয়।
লেভ

সাধারণ ক্ষেত্রে - আপনি ঠিক বলেছেন। তবে উভয় ক্ষেত্রেই অনেক জটিল পরিস্থিতিতে জড়িত জটিল পরিস্থিতিগুলির জন্য আমার ধারণা আরও ভাল।
চিরকাল 1

4
কোন জটিল পরিস্থিতিতে এই পদ্ধতির / অন্য বিবৃতিটির চেয়ে সাধারণের চেয়ে ভাল হতে পারে?
Jarvl

19

আমার একটি কেস ছিল যেখানে আমি দেখতে চেয়েছিলাম যে কোনও বস্তুর ভিতরে অন্যের উপস্থিতি আছে কিনা তাই আমি নির্বাচকের ভিতরে নির্বাচকের জন্য যাচাই করার জন্য প্রথম উত্তরে কিছু যুক্ত করেছি ..

// 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;
};

18

কেমন:

function exists(selector) {
    return $(selector).length;
}

if (exists(selector)) {
    // do something
}

এটি খুব ন্যূনতম এবং $()প্রতিবারের সাথে আপনাকে নির্বাচককে ঘেরানো বাঁচায় ।


3
এটি "যদি উপস্থিত থাকে তবে" যদি "যদি উপস্থিত থাকে" পরিবর্তে "যদি জিনিস থাকে তবে" if($("#thing").exists(){}হিসাবে এটি পড়ে which এছাড়াও, এটি jQuery উপায় নয়।
1j01

15

আমি এটি ব্যবহার করছি:

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

কোনও জিক্যুরি উপাদান উপস্থিত থাকলে কেবল চেইনটি কার্যকর করুন - http://jsfiddle.net/andres_314/vbNM3/2/


14

এখানে existjQuery আমার প্রিয় পদ্ধতি

$.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
    }
);

14

$("selector") lengthসম্পত্তি আছে এমন একটি বস্তু প্রদান করে । যদি নির্বাচক কোনও উপাদান খুঁজে পায় তবে সেগুলি বস্তুটিতে অন্তর্ভুক্ত করা হবে। সুতরাং আপনি যদি এর দৈর্ঘ্য পরীক্ষা করেন তবে দেখতে পারেন কোনও উপাদান রয়েছে কিনা। জাভাস্ক্রিপ্টে 0 == false, সুতরাং আপনি না পেলে 0আপনার কোডটি চলবে।

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

5
"একটি অ্যারে দিন" - না, তা হয় না। এটি আপনাকে একটি jQuery অবজেক্ট দেয় (যা কোনও অ্যারের সাথে কিছু সম্পত্তি ভাগ করে দেয়)। আপনার উত্তরটি মূলত ২০০৯ সালের টিম বাথের মতো।
কোয়ান্টিন

11

এখানে বিভিন্ন পরিস্থিতি এবং জ্যাকুয়েরির নির্বাচক নির্বাচিত কাজ করতে পারে বা না পারে কারণ এটি অ্যারে বা উপাদানগুলি ফেরত দেয় যদি না পারে তবে সরাসরি ব্যবহার করে উপাদান উপস্থিত রয়েছে কিনা তা যাচাই করার সম্পূর্ণ উদাহরণ is

var a = null;

var b = []

var c = undefined ;

if(a) { console.log(" a exist")} else { console.log("a doesn't exit")}
// output: a doesn't exit

if(b) { console.log(" b exist")} else { console.log("b doesn't exit")}
// output: b exist

if(c) { console.log(" c exist")} else { console.log("c doesn't exit")}
// output: c doesn't exit

চূড়ান্ত সমাধান

if($("#xysyxxs").length){ console.log("xusyxxs exist")} else { console.log("xusyxxs doesnn't exist") }
//output : xusyxxs doesnn't exist

if($(".xysyxxs").length){ console.log("xusyxxs exist")} else { console.log("xusyxxs doesnn't exist") }
    //output : xusyxxs doesnn't exist

আপনি আপনার ডিবাগারে $ ("# xysyxxs") চেষ্টা করতে পারেন, আপনি দেখতে পাবেন যে jquery নাল বা অপরিবর্তিত ফিরে আসে না। সুতরাং চূড়ান্ত সমাধানটি কাজ করবে না
বারঞ্জার

11

আপনি যদি এটা তার চেয়ে অনেক বেশী পরীক্ষা হবে না 0মত $(selector).length > 0, $(selector).lengthএটা যথেষ্ট এবং মার্জিত উপায় উপাদানের অস্তিত্ব বার করো। হ্যাঁ, আপনি যদি অতিরিক্ত অতিরিক্ত কিছু করতে চান তবে কেবল এটির জন্য একটি ফাংশন লিখাই ভাল বলে আমি মনে করি না।

if($(selector).length){
  // true if length is not 0
} else {
  // false if length is 0
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.