JQuery üçün "var" funksiyası varmı?

JQuery-də maddənin mövcudluğunu yoxlamaq üçün necə?

Var olan cari kod belədir:

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

Buna yaxınlaşmaq üçün daha zərif bir yol varmı? Bəlkə bir plugin və ya xüsusiyyət?

2475
27 авг. 27 Avqustda Jake McGraw tərəfindən təyin olundu 2008-08-27 22:49 '08 at 10:49 pm 2008-08-27 22:49
@ 40 cavab
  • 1
  • 2

JavaScript-də hər şey "doğru" və ya "səhv" və 0 (və NaN) nömrələri üçün yalan deyir, hər şey true . Buna görə yaza bilərsiniz:

 if ($(selector).length) 

Bu hissəyə >0 ehtiyacınız yoxdur.

2204
25 февр. Cavab Tim Büthe tərəfindən verilir 25 fevral. 2009-02-25 22:16 '09 at 10:16 pm 2009-02-25 22:16

Bəli

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

Bu cavab olaraq: Jeff Atwood ilə patronlaşan podcast

1289
27 авг. Cavab Jake McGraw tərəfindən verilir 27 Avqust. 2008-08-27 22:50 '08 saat 22:50 'da 2008-08-27 22:50

Əgər istifadə etsəniz

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

əgər zəncir mümkün deyilsə, deməli olardı.

Daha yaxşı olardı:

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

Tez-tez verilən suallara alternativ olaraq:

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

Aşağıdakılardan da istifadə edə bilərsiniz. JQuery obyektlərin bir sıra dəyərləri yoxdursa, dizidəki ilk elementi müəyyənləşdirmək qeyri-müəyyənləşdirilir.

 if ( $('#myDiv')[0] ) {  } 
346
14 янв. Jan Erickson'a cavab 14 Yanvar 2009-01-14 22:46 '09 saat 10:46 'da 2009-01-14 22:46

Bunu istifadə edə bilərsiniz:

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

 // if element does not exist if(!$('selector').length){  } 
113
03 апр. Yanni tərəfindən verilmiş cavab 03 Apr 2011-04-03 15:17 '11 at 15:17 2011-04-03 15:17

Sadə JavaScript istifadə edərək mövcudluğunu yoxlamaq üçün ən sürətli və ən semantik şəkildə başa düşülən yol:

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

Bu jQuery uzunluğuna alternativdən bir qədər uzundur, ancaq JS öz metodu olduğundan daha sürətli çalışır.

Və bu, öz jQuery funksiyasını yazmaq üçün alternativdən daha yaxşıdır. Bu alternativ @snover tərəfindən verilən səbəblərdən asılıdır. Amma digər proqramçılara da var ki, təəssürat var ki, var () funksiyası jQuery-a xas olan bir şeydir. JavaScript, borc məbləğini artırmadan kodunuzu düzəldən başqalarını anlayacaq / bilməlidir.

Qeyd Element_id elementindən əvvəl "#" olmadığını qeyd edin (bu, sadə JS deyil, jQuery deyil).

82
11 янв. Cavana Magne 11 yanvar verilir . 2012-01-11 15:27 '12 at 15:27 2012-01-11 15:27

Yazmaqla bir neçə bayt saxlaya bilərsiniz:

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

Bu, hər bir jQuery obyektinin də bir sıra kimi maskalanmasıdır, buna görə də serialın ilk elementini almaq üçün serialın de-diferensiasiya operatorunu istifadə edə bilərik. Göstərilən indeksdə heç bir maddə yoxdursa, müəyyənləşdirilmir.

58
18 янв. Cavab 18 yanvarda Salman A tərəfindən verilir . 2014-01-18 12:04 '14 at 12:04 2014-01-18 12:04

Siz istifadə edə bilərsiniz:

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

Bir az daha zərif, bəlkə də.

54
17 сент. Devon'a Sep 17 cavab verin 2008-09-17 20:53 '08 saat 20:53 'da 2008-09-17 20:53

Bu plugin if ($(ele).exist()) { } və ya geri çağırışlar kimi if ifadəsində istifadə edilə bilər.

Plugin

 ;;(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

Bir və ya iki geri çağırış göstərə bilərsiniz. Element mövcud olduqda birincisi işləyəcək, ikinci element işləməyəcəkdir. Ancaq bir funksiyanı köçürməyə qərar verərsənsə, yalnız bir element varsa işə yarayacaq. Beləliklə, seçilmiş element yoxdursa zəncir öləcəkdir. Əlbəttə, əgər varsa, ilk funksiya işləyəcək və zəncir davam edəcək.

Geri çağırma seçimindən istifadə edərək, zənciri qorumağa kömək etdiyini unutmayın - element qaytarılır və zəncir əmrlərini hər hansı digər jQuery üsulu kimi davam etdirə bilərsiniz!

İstifadə nümunəsi

 if ($.exist('#eleID')) {  } // param as STRING if ($.exist($('#eleID'))) {  } // param as jQuery OBJECT if ($('#eleID').exist()) {  } // enduced on jQuery OBJECT $.exist('#eleID', function() { // param is STRING  CALLBACK METHOD   }, function() { // param is STRING  CALLBACK METHOD   }) $('#eleID').exist(function() { // enduced on jQuery OBJECT with CALLBACK METHOD   }) $.exist({ // param is OBJECT containing 2 key|value pairs: element = STRING, callback = METHOD element: '#eleID', callback: function() {   } }) 
52
09 нояб. Cavab SpYk3HH 09 noyabrda verilir. 2012-11-09 20:47 '12 at 8:47 pm 2012-11-09 20:47

Gördüyünüz kimi, buradakı cavabların əksəriyyəti onlar olmalı kimi olmadıqda elementin uzunluğunu yoxlayırlar, əksər hallarda bu normal ola bilər, lakin 100% deyil, bir funksiyanın yerine bir nömrə ötürüldüyünü təsəvvür edin, buna görə funksiyanı prototip yaradın bütün şərtləri yoxlayır və cavab verməlidir:

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

Bu, uzunluğu və növü yoxlanılacaq, indi onu aşağıdakı kimi yoxlaya bilərsiniz:

 $(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 
48
20 мая '17 в 12:21 2017-05-20 12:21 Cavab Əlireza tərəfindən 20 may, '17 'saat 12:21' də veriləcək 2017-05-05 12:21

Heç bir jQuery lazım deyil. Sadə JavaScript ilə, daha asan və semantically yoxlamaq üçün doğru:

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

Hər hansı bir səbəbdən element identifikatorunu təyin etmək istəmirsinizsə, DOM-a daxil olmaq üçün nəzərdə tutulan hər hansı bir JavaScript üsulunu istifadə edə bilərsiniz.

jQuery həqiqətən sərin, amma təmiz javascripti unutma ...

47
14 нояб. cavab amypellegrini 14 noyabr verilir . 2011-11-14 17:20 '11 at 17:20 'da 2011-11-14 17:20

Bunu istifadə edə bilərsiniz:

 jQuery.fn.extend({ exists: function() { return this.length } }); if($(selector).exists()){} 
42
01 июня '13 в 10:20 2013-06-01 10:20 cavab 01 İyun '13 'da saat 10:20' də Amitābha 2013-06-01 10:20 verilir

Bütün əvvəlki cavabların səbəbi .length parametresinin çoğunlukla perdelerin arkasında bir SelectorAll istekli olan jquery $() seçicisini kullanmasıdır (ya da birbaşa istifadə olunur). Bu üsul olduqca yavaşdır, çünki bütün DOM ağacını təhlil etmək lazımdır, bu seçiciyə bütün matçları axtarır və bir sıra ilə doldurmalıdır.

['Length'] parametri lazım deyil və ya faydalı deyildir və document.querySelector(selector) daha uyğun olarsa, bunun yerine document.querySelector(selector) istifadə document.querySelector(selector) , çünki bu, eşleşen ilk elementi qaytarır və ya tapılmadıqda null olur.

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

Ancaq bu üsul bizi əsl dönüş obyekti ilə tərk edir; bir dəyişən olaraq saxlanmır və yenidən istifadə edildiyi təqdirdə yaxşı olar (beləliklə unutduqda əlaqəni qənaət edirik).

 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"));  console.log(myel);  myel=null;  

Bəzi hallarda bu lazım ola bilər. Aşağıdakı kimi for loop üçün istifadə edilə bilər:

  for (var myel; myel = elementIfExist(sel); myel.getParentNode.removeChild(myel)) if (myel == myblacklistedel) break; 

Əgər həqiqətən bir elementə ehtiyacınız yoxdursa və yalnız həqiqəti / yalanı saxlamaq istəyirsənsə, sadəcə ikiqat etməyin! O, açılmayan ayaqqabılarda işləyir, buna görə niyə buradadır?

 function elementExists(selector){ return !!document.querySelector(selector); }  var hastables = elementExists("table");  if (hastables){  } setTimeOut(function (){if (hastables  !elementExists("#mytablecss")) alert("bad table layouts");},3000); 
37
12 авг. texnosaurus tərəfindən verilmiş cavab 12 Avqust 2014-08-12 02:42 '14 at 2:42 2014-08-12 02:42

Mən if ($(selector).length) {} əgər kifayət deyilsə. selector boş bir {} obyekt olduğunda ərizənizi selector .

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

Mənim yeganə təklifim {} üçün əlavə bir çek etməkdir.

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

Bir az çətin olmasına baxmayaraq hələ də daha yaxşı bir həll axtarıram.

Düzenle: XƏBƏRDARLIQ! selector bir simli olduqda bu IE-də işləmir.

 $.isEmptyObject('hello') // FALSE in Chrome and TRUE in IE 
32
06 февр. Cavab Oleqə verildi 06 fevral. 2012-02-06 23:37 '12 at 11:37 pm 2012-02-06 23:37

Elementin java skriptindəki uzunluğunu istifadə etmədiyini və ya yoxluğunu yoxlaya bilərsiniz. Uzunluq sıfırdan çox olduqda, element uzunluq sıfırsa, element yoxdur, sonra element yoxdur

 // 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 } 
30
09 июля '15 в 15:39 2015-07-09 15:39 Cavab Anurag Deokar tərəfindən 09.07.2014 tarixində saat 15: 39-da verilir

$.contains() istədiyiniz nədir?

jQuery.contains( container, contained )

İkinci argüman tərəfindən verilən DOM elementi, birbaşa torpaq olsun və ya daha dərindən içəri yerləşdirilən olsun, ilk argument tərəfindən verilən DOM elementinin nəsli olduqda, $.contains() metodu həqiqətə qaytarılır. Əks halda, yanlış qaytarır. Yalnız element nodeları dəstəklənir; ikinci arqument bir mətn və ya şərh nodu olsa, $.contains() yanlış qaytarır.

Qeyd İlk arqument DOM elementi olmalı, jQuery obyekti və ya müntəzəm JavaScript obyektidir.

30
23 окт. Hiway 23 oktyabrda yerləşdirildi 2013-10-23 08:46 '13 at 8:46 2013-10-23 08:46

Məqbulluğu yoxlayın rəsmi jQuery veb saytında saxlanılır!

Seçiciniz tərəfindən geri qaytarılan jQuery kolleksiyasındakı uzunluğu əmlakını istifadə edin:

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

Bir elementin olub olmadığını yoxlamaq həmişə lazım deyil. Aşağıdakı kodu, element varsa, elementi göstərəcək və olmadıqda heç bir şey etməyəsiniz (səhvsiz):

 $("#myDiv").show(); 
26
22 марта '17 в 17:32 2017-03-22 17:32 Cavab 22 yanvar 17: 17-də Tilak Maddy tərəfindən verilir. 2017-03-22 17:32

bu, bütün cavablara çox bənzəyir, amma operatoru istifadə etməyin ! iki dəfə belə bir boolean dəyər əldə edə bilərsiniz:

 jQuery.fn.exists = function(){return !!this.length}; if ($(selector).exists()) { // the element exists, now what?... } 
25
04 мая '15 в 6:31 2015-05-04 06:31 Cavab Santiago Hernández tərəfindən mayın 04, '15 'saat 06:31' də verilir 2015-05-04 06:31
 $(selector).length  //Do something 
25
28 мая '12 в 15:58 2012-05-28 15:58 cavab 28 may 2012-ci ildə saat 15 : 58-SJG tərəfindən verilir. 2012-05-28 15:58

DOM element sınağını sınayın.

 if (!!$(selector)[0]) // do stuff 
23
09 авг. Cavab qonaq271314 09 avqustda verilir . 2015-08-09 05:55 '15 at 5:55 'də 2015-08-09 05:55

Yuxarıdakı cavabdan ilhamlanaraq aşağıdakılarla gəldim:

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

jQuery.contains iki DOM elemanı alır və birincisi bir olub-olmadığını yoxlayır.

document.documentElement istifadə edin, çünki ilk dəlil yalnız mövcud sənəddə bir elementin mövcudluğunu yoxlamaq üçün tətbiq etmək istədiyimizdə exists üsulun semantikasını yerinə yetirir.

Aşağıda $(4)$(4).exists() üçün truthy dəyərlərini truthy $(sel)[0]$(sel).length truthy $(sel).length ilə jQuery.exists() ilə müqayisə edən bir jQuery.exists() $(4).exists() false . DOM-da bir element varlığının yoxlanılması kontekstində bu istənilən nəticə kimi görünür.

 td { border: 1px solid black } 
22
13 окт. Cavab Oliver 13 okt verilir . 2015-10-13 23:01 '15 at 11:01 pm 2015-10-13 23:01

Bunun üçün düz vanil javascriptindən istifadə etməyi sevirəm.

 function isExists(selector){ return document.querySelectorAll(selector).length>0; } 
20
19 июня '16 в 1:37 2016-06-19 01:37 Cavab Sanu Uthaya Bollera 19 iyun, '16 'da 1:37 2016-06-19 01:37 tarixində verilir

Bu suala gəldim və hazırda istifadə etdiyim kod parçasını paylaşmaq istərdim:

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

Və indi belə bir kod yaza bilərəm -

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

Bu bir çox kod kimi görünə bilər, amma CoffeeScript yazarkən bu olduqca azdır:

 $.fn.exists = (callback) -> exists = @length callback.call() if exists new class otherwise: (fallback) -> fallback.call() if not exists 
18
28 июля '14 в 13:50 2014-07-28 13:50 Cavab Eternal1 28 iyul '13 saat 13:50 'də verilir 2014-07-28 13:50

Heç bir jQuery lazım deyil

 if(document.querySelector('.a-class')) { // do something } 
18
28 нояб. Cavab 28 noyabr Pawel tərəfindən verilir . 2016-11-28 13:43 '16 saat 13:43 'da 2016-11-28 13:43

Bir obyektin başqa birinin içərisində olub olmadığını görmək istədiyim bir hadisə var idi, mən seçici içərisindəki selektorun yoxlanılması üçün ilk cavabına bir şey əlavə etdim.

 // 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; }; 
17
06 апр. jcreamer898 tərəfindən verilmiş cavab Apr 06 2012-04-06 00:02 '12 at 0:02 2012-04-06 00:02

Haqqında:

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

Bu, çox azdır və hər dəfə $() selektoruna daxil olmağınız zaman qənaət edir.

16
05 марта '14 в 0:15 2014-03-05 00:15 cavab 05.05.2014 tarixində 0:15 2014- il saat 00: 15-də verilir

Mən bunu istifadə edirəm:

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

Yalnız bir jQuery elementi varsa zənciri çalıştırın - http://jsfiddle.net/andres_314/vbNM3/2/

12
02 авг. Cavab verilir andy_314 02 aug. 2012-08-02 00:56 '12 at 0:56 2012-08-02 00:56

Burada jQuery-də ən sevdiyim üsul exist

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

və seçici mövcud olmadıqda geri çağırışı dəstəkləyən bir versiyası

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

Məsələn:

 $('#foo .bar').exist( function () { // Stuff when '#foo .bar' exists }, function () { // Stuff when '#foo .bar' does not exist } ); 
11
08 марта '16 в 20:06 2016-03-08 20:06 Cavab, 08 mart 'da 20:06' da ducdhm tərəfindən verilmişdir 2016-03-08 20:06

$("selector" ) length xüsusiyyətinə malik olan bir obyekti qaytarır. Seçici hər hansı bir maddəni taparsa, obyektə daxil edilir. Buna görə, uzunluğunu yoxlayarsanız, hər hansı bir elementin olub olmadığını görəcəksiniz. Javascript 0 == false , beləliklə 0 kodu almasanız kodunuz çalışacaq.

 if($("selector").length){ //code in the case } 
11
25 марта '16 в 14:05 2016-03-25 14:05 cavab Kamuran Sönecek tərəfindən 25 Mart '16' da 14:05 'də 2016-03-25 14:05' də verilir

Bu 0 $(selector).length > 0 , $(selector).length və elementlərin mövcudluğunu yoxlamaq üçün zərif bir şəkildə yoxdursa, yoxlamağa ehtiyac yoxdur. Bilmirəm, buna bənzər şeylər etmək istəyirsinizsə, bunun üçün bir funksiyanı yazmaq lazımdır.

 if($(selector).length){ // true if length is not 0 } else { // false if length is 0 } 
9
20 июня '17 в 12:43 2017-06-20 12:43 Cavab 20 iyun 17: 43-Andrey Todorut tərəfindən 12:43 2017-06-20 12:43 tarixində verilir
 if ( $('#myDiv').size() > 0 ) { //do something } 

size() selector tərəfindən qaytarılan elementlərin sayını hesablayır.

8
25 февр. Cavab Mad_Hat 25 Fevral verilir. 2009-02-25 05:44 '09 saat 05:44 'da 2009-02-25 05:44
  • 1
  • 2

tags ilə bağlı digər suallar və ya bir sual