JQuery සඳහා “පවතින” ශ්‍රිතයක් තිබේද?


2781

JQuery හි මූලද්‍රව්‍යයක පැවැත්ම පරීක්ෂා කරන්නේ කෙසේද?

මා සතුව ඇති වර්තමාන කේතය මෙයයි:

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

මේ සඳහා ප්‍රවේශ වීමට වඩා අලංකාර ක්‍රමයක් තිබේද? සමහර විට ප්ලගිනයක් හෝ ශ්‍රිතයක්ද?

Answers:


2493

ජාවාස්ක්‍රිප්ට් හි සෑම දෙයක්ම 'සත්‍යවාදී' හෝ 'ව්‍යාජ' වන අතර සංඛ්‍යා සඳහා 0(සහ NaN) යන්නෙන් අදහස් වන්නේ falseඅන් සියල්ලම ය true. එබැවින් ඔබට ලිවිය හැකිය:

if ($(selector).length)

ඔබට එම >0කොටස අවශ්‍ය නොවේ .


53
id abhirathore2006 ඔබ හැඳුනුම් තේරීමක් භාවිතා කරන්නේ නම් සහ මූලද්‍රව්‍යය නොපවතී නම් දිග 0 වන අතර ව්‍යතිරේකයන් විසි නොකරයි.
රොබට්

15
සිත්ගන්නා සුළුය NaN != false.
රොබට්

36
O රොබට් සහ [] + []= ""... අහ් මම ජාවාස්ක්‍රිප්ට් වලට කැමතියි
ජේම්ස්

10
Ame ජේම්ස් ඒ නිසා [].toString() === [].join(',') === ""සහ "" === "".
ඉස්මයිල් මිගෙල්

5
O රොබට් සහtypeof NaN == 'number'
ඔරියඩම්

1357

ඔව්!

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

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

මෙය ප්‍රතිචාරයක් ලෙස: ජෙෆ් ඇට්වුඩ් සමඟ හර්ඩින් කෝඩ් පොඩ්කාස්ට්


254
මම ලියන්නේ: if (select (තේරීම් කාරකය). දිග) {...} නොමැතිව '> 0'
vsync

369
ඔබේ $.fn.existsඋදාහරණය වන්නේ දේපල බැලීම (ලාභ!) ප්‍රතිස්ථාපනය කිරීම වඩා මිල අධික වන ක්‍රියාකාරී ඇමතුම් දෙකකි. එම ශ්‍රිත ඇමතුම් වලින් එකක් ඔබ සතුව දැනටමත් ඇති jQuery වස්තුවක් ප්‍රතිනිර්මාණය කරයි.
සී ස්නෝවර්

212
@redsquare: jQuery හි මෙවැනි ආකාරයේ ශ්‍රිතයක් එක් කිරීම සඳහා කේත කියවීමේ හැකියාව හොඳම හේතුවයි. .existsකියැවෙන දෙයක් තිබීම පිරිසිදුව .lengthකියවන අතර, අර්ථ නිරූපණය සමාන ප්‍රති .ලයක් සමඟ සමපාත වුවද, අර්ථාන්විතව වෙනස් දෙයක් ලෙස කියවයි .
බෙන් සොටෝ

48
@quixoto, කණගාටුයි නමුත් .length යනු එතීම අවශ්‍ය නොවන බොහෝ භාෂාවලින් සම්මතයකි. වෙන කොහොමද ඔබ අර්ථ නිරූපණය කරන්නේ. දිග?
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> මූලද්රව්ය තිබේ නම්. " x .exists ("a") කියවන්නේ "<a> මූලද්‍රව්‍ය තිබේ නම්."
ස්ට්‍රේජර්

16
සත්‍ය නමුත් නැවතත්, ඔබ ඇඟවුම් කරන්නේ දම්වැල දැමීම කළ හැකි බවත් මම $ (තේරීම් කාරක) වැනි දෙයක් කිරීමට උත්සාහ කළහොත් .එක්වාදීන් (). css ("වර්ණය", "රතු") එය ක්‍රියා නොකරනු ඇති අතර එවිට මම = * (
ජෝන් එරික්සන්

19
Attr සහ data functions වැනි දාම කළ නොහැකි ක්‍රම දැනටමත් තිබේ. මම ඔබේ කාරණය දකින නමුත්, එය වටින දේ සඳහා, මම දිග> 0 කෙසේ හෝ පරීක්ෂා කරමි.
මැතිව් ක්‍රම්ලි

39
මිහිපිට ඔබට මෙය සම්බන්ධ කිරීමට අවශ්‍ය ඇයි? $(".missing").css("color", "red")දැනටමත් නිවැරදි දේ කරයි… (එනම් කිසිවක් නැත)
බෙන් හිස්

15
දම්වැල සම්බන්ධ කිරීම සම්පුර්ණ ටොෂ් - නව jQuery වස්තුවක් හැර වෙනත් දෙයක් ආපසු ලබා දෙන jQuery ක්‍රම ඕනෑ තරම් තිබේ , $.fnඑබැවින් දම්වැල් නොකරන්න.
ඇල්නිටැක්

136

ඔබට මෙය භාවිතා කළ හැකිය:

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

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

134
ඔබට මීට වසර 2 කට පෙර ටිම් බෙත් මේ පිළිතුර ලබා දී ඇති බව ඔබ දුටුවේ නැද්ද?
Th4t Guy

101
Pfft, ටිම් කිසි විටෙකත් මූලද්‍රව්‍යය නොපවතින්නේ දැයි පරීක්ෂා කරන්නේ කෙසේදැයි පෙන්වා නැත.
ජෙරමි ඩබ්ලිව්

1
ඔබ අදහස් කළේ ජීවිතය "වෙනත්" ද? මගේ Q මෙයයි: වැරදියි, එය පැවතිය යුතුය, නැතහොත් තේරීම්කරු නොගැලපේ. දිග අතිරික්තය.
රිචීඑච්

26
මෙම පිළිතුර සහ අදහස් සාරාංශගත කරන්නේ ස්ටක් ඕවර් ප්‍රවාහය ක්‍රියා කරන
ආකාරයයි

101

පැවැත්ම පරීක්ෂා කිරීම සඳහා වේගවත්ම හා අර්ථාන්විතව ස්වයං පැහැදිලි කිරීමේ ක්‍රමය සැබවින්ම සරල භාවිතා කිරීමෙනි JavaScript:

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

එය jQuery දිග විකල්පයට වඩා ලිවීමට ටිකක් දිගු වේ, නමුත් එය ස්වදේශීය JS ක්‍රමයක් බැවින් වේගයෙන් ක්‍රියාත්මක වේ.

ඔබේම jQueryශ්‍රිතයක් ලිවීමේ විකල්පයට වඩා එය හොඳය . ස්නෝවර් ප්‍රකාශ කළ හේතු නිසා එම විකල්පය මන්දගාමී වේ. නමුත් එය වෙනත් ක්‍රමලේඛකයන්ට එම exists()ශ්‍රිතය jQuery වලට ආවේණික දෙයක් බවට හැඟීමක් ලබා දෙනු ඇත. JavaScriptදැනුම ණය වැඩි නොකර ඔබේ කේතය සංස්කරණය කරන වෙනත් අය විසින් තේරුම් ගත යුතුය.

සැ.යු: මීට පෙර '#' හි lack නතාවක් ඇති බව සැලකිල්ලට ගන්න element_id(මෙය සරල JS බැවින් නොවේ jQuery).


56
සම්පූර්ණයෙන්ම එකම දේ නොවේ. ඕනෑම CSS රීතියක් සඳහා JQuery තේරීම් භාවිතා කළ හැකිය - උදාහරණයක් ලෙස $('#foo a.special'). තවද එයට එක් මූලද්‍රව්‍යයකට වඩා ආපසු ලබා දිය හැකිය. getElementByIdඒ වෙත ළඟා වීමට පටන් ගත නොහැක.
කිකිටෝ

7
තේරීම් කාරකයන් තරම් පුළුල් ලෙස අදාළ නොවන බව ඔබ නිවැරදිය. කෙසේ වෙතත්, එය වඩාත් පොදු අවස්ථාවෙහිදී කාර්යය ඉතා හොඳින් ඉටු කරයි (තනි මූලද්‍රව්‍යයක් තිබේදැයි පරීක්ෂා කිරීම). ස්වයං පැහැදිලි කිරීම හා වේගය පිළිබඳ තර්ක තවමත් පවතී.
මැග්නේ

29
Oz නොස් if(document.querySelector("#foo a.special"))වැඩ කරයි. JQuery අවශ්‍ය නොවේ.
නිල් අහස

34
JS එන්ජින්වල වේගය පිළිබඳ තර්කය මියගොස් ඇත්තේ jQuery නොමැතිව ක්‍රියා කළ නොහැකි පුද්ගලයින්ගේ මනසෙහි පමණි, මන්ද එය ඔවුන්ට ජයගත නොහැකි තර්කයක් වන බැවිනි.
නිල් අහස

22
Document.getElementById අප සතුව තිබූ පැරණි දින මතකද? මට හැම විටම ලේඛනය අමතක විය. එය ක්‍රියා නොකරන්නේ මන්දැයි සිතා ගැනීමට නොහැකි විය. මම සෑම විටම එය වැරදි ලෙස අක්ෂර වින්‍යාසය කර ඇති අතර චරිත ආවරණ වැරදිය.
JustJohn

73

ලිවීමෙන් ඔබට බයිට් කිහිපයක් ඉතිරි කළ හැකිය:

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

මෙම ක්රියා අපි සිට පළමු අයිතමය ලබා ගැනීමට අරාව dereferencing ක්රියාකරු භාවිතා කළ හැකි නිසා එක් එක් jQuery වස්තුව ද, රැසක් වෙස් ගනියි නිසා මාලාවක් . undefinedනිශ්චිත දර්ශකයේ අයිතමයක් නොමැති නම් එය නැවත පැමිණේ .


1
මෙම නිශ්චිත පිළිතුර පළ කිරීම සඳහා මා මෙහි පැමිණියේ ... අනිවාර්ය ෆෙඩල්
ජේසන් විල්ක්සාක්

3
Ason ජේසන් විල්ක්සාක් ඒ වෙනුවට අදහස් දැක්වීමට සැලකිලිමත් වන්න: .eq [0] හෝ .First () ටයිප් කිරීම වෙනුවට පළමු මූලද්‍රව්‍යය සඳහන් කිරීමට?
ජීන් පෝල් AKA el_vete

5
නැත, jQuery.first()නැතහොත් jQuery.eq(0)ආපසු එන වස්තූන් දෙකම, වස්තූන් හිස් වුවත් ඒවා සත්‍ය වේ. මෙම උදාහරණ මඟින් මෙම කාර්යයන් භාවිතා කළ නොහැක්කේ මන්ද යන්න පැහැදිලි කළ යුතුය:if(jQuery("#does-not-exist").eq(0)) alert("#does-not-exist exists")
සල්මාන්

1
නිවැරදි. .eq(0)දිග 1 හෝ 0 දක්වා කපා දැමූ තවත් jQuery වස්තුවක් නැවත .first()ලබා දෙයි .eq(0). නමුත් .get(0)පළමු DOM මූලද්‍රව්‍යය නැවත ලබා දෙයි හෝ undefinedඑය සමාන වේ [0]. JQuery වස්තුවක පළමු DOM මූලද්‍රව්‍යය නම සහිත සාමාන්‍ය වස්තු දේපල තුළ ගබඩා කර ඇත '0'. එය සරල දේපල ප්‍රවේශයකි. එකම වර්ගයේ වාත්තු කිරීම සංඛ්‍යාත්මකව 0නූල් බවට පරිවර්තනය කිරීමෙන් පැන නගී '0'. එබැවින් වාත්තු කිරීම ගැටළුවක් නම් ඔබට $.find(selector)['0']ඒ වෙනුවට භාවිතා කළ හැකිය .
රොබට්

66

ඔයාට පාවිච්චි කරන්න පුළුවන්:

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

කුඩා වැඩි අලංකාර, සමහර විට.


38
එවැනි සරල දෙයක් සඳහා මෙය ඕනෑවට වඩා වැඩිය. ටිම් බෙත්ගේ පිළිතුර බලන්න
vsync

මෙය නිවැරදි පිළිතුරයි. 'දිග' ක්‍රමයට ඕනෑම අංකයක් සමඟ ව්‍යාජ ධනාත්මක බවක් ලබා දීමේ ගැටලුව ඇත, උදාහරණයක් ලෙස: $ (666). දිග // ප්‍රතිලාභ 1, නමුත් එය වලංගු තේරීමක් නොවේ
earnaz

ඉතා සරල කාර්යයක් සඳහා මෙය අතිශයින් මිල අධිකය. .Is () නම් jquery ක්‍රියාත්මක කිරීම පිළිබඳව සොයා බලන්න, එවිට ඔබට මෙම සරල ප්‍රශ්නයට පිළිතුරු සැපයීම සඳහා කොපමණ කේතයක් සැකසිය යුතුදැයි ඔබට පෙනෙනු ඇත. එසේම ඔබට හරියටම කිරීමට අවශ්‍ය කුමක්ද යන්න පැහැදිලි නැත, එබැවින් එය සමාන හෝ අඩු අලංකාරයක් විය හැකි අතර පසුව විසඳුමකි.
micropro.cz

1
@earnaz නියමයි, නියම ඇල්ලීම. ඇත්තෙන්ම එය වටින තැනක් බව මට නොපෙනේ. මූලද්‍රව්‍ය හදුනා ගන්නා දේව්ස් 666ඔවුන්ගේ කේතය කැඩී යාමට වෙනත් හේතු තිබිය හැක. එය අවලංගු තේරීම් කාරකයක් වන අතර , $ (666). දිග වලංගු ජාවාස්ක්‍රිප්ට් ය : එය සත්‍යවාදී ලෙස ඇගයීමට ලක් කරයි, එබැවින් තත්වය තෘප්තිමත් කළ යුතුය .
ටොඩ්

specificearnaz එම විශේෂිත අවස්ථාව මග හැරීම සඳහා $.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

ඔබට ඇමතුම් එකක් හෝ දෙකක් නියම කළ හැකිය. එම මූලද්රව්යය කරන්නේ නම් දෙවන එක් වෙඩි ඇත අංගයක් පවතී නම්, පළමු එක වෙඩි ඇත, නැත පවතී. කෙසේ වෙතත්, ඔබ එක් ශ්‍රිතයක් පමණක් සම්මත කිරීමට තෝරා ගන්නේ නම්, එය වෙඩි තබන්නේ මූලද්‍රව්‍යය පවතින විට පමණි. මේ අනුව, තෝරාගත් අංගයක් වන්නේ නම් දාම මිය යනු ඇත නොහැකි පවතී. ඇත්ත වශයෙන්ම, එය පවතින්නේ නම්, පළමු කාර්යය ගිනි ගන්නා අතර දාමය දිගටම පවතිනු ඇත.

කෝල්බැක් ප්‍රභේදය භාවිතා කිරීම දාමයේ හැකියාව පවත්වා ගැනීමට උපකාරී වන බව මතක තබා ගන්න - මූලද්‍රව්‍යය නැවත ලබා දෙන අතර වෙනත් ඕනෑම 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...
}

කිසියම් හේතුවක් නිසා මූලද්‍රව්‍යයට හැඳුනුම්පතක් දැමීමට ඔබට අවශ්‍ය නැතිනම්, ඔබට තවමත් DOM වෙත ප්‍රවේශ වීම සඳහා නිර්මාණය කර ඇති වෙනත් ජාවාස්ක්‍රිප්ට් ක්‍රමයක් භාවිතා කළ හැකිය.

jQuery ඇත්තෙන්ම සිසිල් ය, නමුත් පිරිසිදු ජාවාස්ක්‍රිප්ට් අමතක වීමට ඉඩ නොදෙන්න ...


5
මම දනිමි: එය මුල් ප්‍රශ්නයට කෙලින්ම පිළිතුරු සපයන්නේ නැත (එය jquery ශ්‍රිතයක් ඉල්ලයි), නමුත් එවැනි අවස්ථාවක පිළිතුර “නැත” හෝ “අර්ථාන්විත නිවැරදි විසඳුමක් නොවේ”.
amypellegrini

ඔබට මව් තේරීම්කරුවෙකු අවශ්‍ය නම් කුමක් කළ :has()යුතුද?
Константин un

54

ඔබට මෙය භාවිතා කළ හැකිය:

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

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

43

පෙර පිළිතුරු සියල්ලටම .lengthපරාමිතිය අවශ්‍ය වීමට හේතුව ඔවුන් වැඩිපුරම භාවිතා කරන්නේ jquery හි $()තේරීම වන අතර එය තිරය පිටුපස විමසුම් සෙලෙක්ටර් ඇත (නැතහොත් ඔවුන් එය කෙලින්ම භාවිතා කරයි). මෙම ක්‍රමය තරමක් මන්දගාමී වන්නේ එයට තේරීම් කාරකයට සියලු ගැලපීම් සොයන මුළු DOM ගස විග්‍රහ කිරීමට අවශ්‍ය වන අතර ඔවුන් සමඟ අරාවක් ජනනය කළ යුතු බැවිනි.

['දිග'] පරාමිතිය අවශ්‍ය හෝ ප්‍රයෝජනවත් නොවන අතර ඔබ 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 */

සමහර අවස්ථාවල මෙය අපේක්ෂා කළ හැකිය. මෙය for for loop එකක භාවිතා කළ හැකිය:

/* 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()අසත්‍යය නැවත ලබා දෙනු ඇත.

සටහන : පළමු තර්කය DOM අංගයක් විය යුතුය, jQuery වස්තුවක් හෝ සරල ජාවාස්ක්‍රිප්ට් වස්තුවක් නොවේ.


3
මෙය තේරීම් කාරකයක් භාර නොගනී, එයින් අදහස් කරන්නේ ඔහුට එය තෝරා ගත යුතු බවයි, එයින් අදහස් කරන්නේ ඔහුට තේරීමේ ප්‍රති result ලය පරීක්ෂා කළ හැකි බවයි.

39

මම if ($(selector).length) {}ප්රමාණවත් නොවන බව සොයාගෙන ඇත. selectorහිස් වස්තුවක් වන විට එය ඔබගේ යෙදුම නිහ ly ව බිඳ දමනු ඇත {}.

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

nevernnnnnn ඇත්තටම කවදාවත් (මම තවදුරටත් jQuery භාවිතා නොකරමි). නමුත් මම හිතන්නේ මීට වසර 3 කට පෙර මට ඒපීඅයි එකක් හෙළිදරව් කිරීමේ සිද්ධියක් ඇති අතර එය තේරීම් කාරකයක් ගෙන එම තේරීම් කාරකයේ මූලද්‍රව්‍ය ගණන ආපසු ලබා දෙනු ඇත. වෙනත් ඩිව් එකක් හිස් වස්තුවක ගමන් කරන්නේ නම්, එය 1 සමඟ වැරදියට ප්‍රතිචාර දක්වනු ඇත.
ඔලෙග්

3
පොළොව මත ඇයි ඔබ හිස් වස්තුව සමත් වනු ඇත {}කිරීමට $()?
සියලුම කම්කරුවන් අත්‍යවශ්‍යයි

7
@cpburnz ඇයි ඔබ මගෙන් අහන්නේ? මම ඒපීඅයි සැපයුම්කරුවෙක් පමණයි ... මිනිසුන් සියලු ආකාරයේ මෝඩ දේවල් ඒපීඅයි වෙත යවයි.
ඔලෙග්

4
Ag ෆැග්නර්බ්‍රැක් සඳහන් කළ jquery නිකුතුව ඔහුගේ අදහස් දැක්වීමෙන් ටික කලකට පසුව යාවත්කාලීන විය. පේන විදියට ඒක යන්නෙ නෑ.
ජෝශප් ගේබ්‍රියෙල්

38

ජාවා ස්ක්‍රිප්ටයේ දිග භාවිතා නොකිරීම හෝ මූලද්‍රව්‍යය තිබේදැයි ඔබට පරීක්ෂා කළ හැකිය. දිග ශුන්‍යයට වඩා වැඩි නම් මූලද්‍රව්‍යය පවතින්නේ දිග ශුන්‍ය නම් මූලද්‍රව්‍යය නොපවතී

// 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
($ ('# Elementid'). දිග) {be ප්‍රමාණවත් නම්, කාලගුණ දිග 0 ට වඩා වැඩිදැයි ඔබ පරීක්ෂා නොකළ යුතුය.
ප්‍රණව් ලැබේ

13
ඔබ ඇත්තටම ප්‍රශ්නය කියවා තිබේද? OP භාවිතා කරන එකම ක්‍රමය එයයි.
A1rPun

34

මූලද්‍රව්‍යයක පැවැත්ම පරීක්ෂා කිරීම නිල jQuery වෙබ් අඩවියේම පිළිවෙලට ලේඛනගත කර ඇත!

ඔබේ තේරීම්කරු විසින් ආපසු ලබා දුන් jQuery එකතුවෙහි .length දේපල භාවිතා කරන්න :

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

විසින් ජාතිය hiway පිළිතුර මම පහත දැක්වෙන සමග පැමිණි:

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

jQuery.contains විසින් DOM මූලද්‍රව්‍ය දෙකක් ගෙන පළමු එක දෙවැන්න අඩංගු දැයි පරීක්ෂා කරයි.

භාවිතා document.documentElementපළමු තර්කය ලෙස ඇති semantics ඉටු existsඅපි වත්මන් ලේඛනයේ මූලද්රව්යයක පැවැත්ම පරීක්ෂා කිරීමට පමණක් එය අයදුම් කිරීමට අවශ්ය වන විට ක්රමය.

පහත බලන්න, මම එකට සමාන කරන තැනට දානවා jQuery.exists()එරෙහිව $(sel)[0]හා $(sel).lengthනැවත දෙකම ප්රවේශයන් truthyසඳහා අගයන් $(4)අතර $(4).exists()ප්රතිලාභ false. DOM හි මූලද්‍රව්‍යයක පැවැත්ම පරීක්ෂා කිරීමේ සන්දර්භය තුළ මෙය අපේක්ෂිත ප්‍රති .ලය ලෙස පෙනේ .


26

JQuery (මූලික විසඳුම) අවශ්‍ය නොවේ

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

පහත බොහෝ ක්‍රියාකාරී විකල්පය (පන්තියකට පෙර තිතක් නොමැති බව සැලකිල්ලට ගන්න).

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

querySelector jQuery හි matching () (sizzle) වැනි නිසි ගැලපෙන එන්ජිමක් භාවිතා කරන අතර වැඩි පරිගණක බලයක් භාවිතා කරයි, නමුත් 99% ක්ම හොඳ වනු ඇත. දෙවන විකල්පය වඩාත් පැහැදිලිව පෙනෙන අතර කළ යුතු දේ හරියටම කේතයට කියයි. Jsperf https://jsperf.com/getelementsbyclassname-vs-queryselectorall/25 අනුව එය වඩා වේගවත්ය


25

මෙය කිරීමට සරල වැනිලා ජාවාස්ක්‍රිප්ට් භාවිතා කිරීමට මම කැමතියි.

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

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
OP හි මුල් ප්‍රවේශය මෙයට වඩා අවම හා අලංකාර ලෙස මට පෙනේ. OP හි ක්‍රමය කෙටි වන විට ඇමතුම් ලබා ගැනීම සම්බන්ධ නොවන විට මෙම කේතය ලිවීමට ඕවර්කිල් මෙන් පෙනේ.
ලෙව්

සරල අවස්ථා සඳහා - ඔබ හරි. නමුත් අවස්ථා දෙකේදීම කේත රාශියක් සම්බන්ධ වන වඩාත් සංකීර්ණ අවස්ථාවන් සඳහා මගේ ප්‍රවේශය වඩා හොඳ යැයි මම සිතමි.
සදාකාලික 1

4
සරල නම් / වෙනත් ප්‍රකාශයකට වඩා මෙම ප්‍රවේශය වඩා හොඳ කුමන සංකීර්ණ අවස්ථාවෙහිදීද?
ජාවල්

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(){}ලෙස ය. එසේම, එය 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')});               
      }
    ); 

JQuery අංගයක් තිබේ නම් පමණක් දාමය ක්‍රියාත්මක කරන්න - 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දේපල ඇති වස්තුවක් ආපසු ලබා දෙයි . තේරීම්කරු කිසියම් මූලද්‍රව්‍යයක් සොයා ගන්නේ නම්, ඒවා වස්තුවට ඇතුළත් වේ. එබැවින් ඔබ එහි දිග පරීක්ෂා කළහොත් ඔබට කිසියම් මූලද්‍රව්‍යයක් තිබේදැයි බැලීමට හැකිය. JavaScript හි 0 == false, එබැවින් ඔබට නොලැබුනේ නම් 0ඔබේ කේතය ක්‍රියාත්මක වේ.

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

5
"අරාවක් දෙන්න" - නැත, එය එසේ නොවේ. එය ඔබට jQuery වස්තුවක් ලබා දෙයි (එය අරාව සමඟ සමහර ගුණාංග බෙදා ගනී). ඔබේ පිළිතුර 2009 සිට ටිම් බෙත්ගේ පිළිතුරට සමාන ය.
ක්වෙන්ටින්

11

විවිධ තත්වයන් පිළිබඳ සම්පූර්ණ උදාහරණය මෙයයි. JQuery තේරීම් කාරකයේ සෘජු භාවිතයෙන් මූලද්‍රව්‍යය පවතින්නේ දැයි පරීක්ෂා කර බැලිය හැකි අතර එය අරාව හෝ මූලද්‍රව්‍ය නැවත ලබා දෙන නිසා ක්‍රියා නොකරනු ඇත.

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 ශුන්‍ය හෝ නිර්වචනය නොකළ බව ඔබට පෙනෙනු ඇත. එබැවින් අවසාන විසඳුම ක්‍රියාත්මක නොවනු ඇත
Béranger

11

ඔබ එය ට වඩා වැඩි වේ නම්, පරීක්ෂා කිරීමට අවශ්ය නැත 0වගේ $(selector).length > 0, $(selector).lengthඑය ප්රමාණවත් හා මූලද්රව්ය පැවැත්ම පරීක්ෂා කිරීමට අලංකාර ක්රමයක්. මේ සඳහා පමණක් ශ්‍රිතයක් ලිවීම වටී යැයි මම නොසිතමි, ඔබට තවත් අමතර දේවල් කිරීමට අවශ්‍ය නම්, ඔව්.

if($(selector).length){
  // true if length is not 0
} else {
  // false if length is 0
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.