Есть ли «существует» функция для jQuery?

Есть ли функция «существует» для jQuery?

Причина, по которой все предыдущие ответы требуют параметра .length заключается в том, что они в основном используют селектор jquery $() , у которого querySelectorAll находится за занавесом (или они используют его напрямую). Этот метод довольно медленный, потому что ему нужно проанализировать все дерево DOM, найти все совпадения с этим селектором и заполнить их массивом.

Параметр [‘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 */ 

В некоторых случаях это может быть желательно. Его можно использовать в цикле for следующим образом:

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

Если вам на самом деле не нужен элемент и вы хотите получить / сохранить только значение true / false, просто удвойте его! Это работает для обуви, которая развязана, так почему узел здесь?

 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 {amp}amp;{amp}amp; !elementExists("#mytablecss")) alert("bad table layouts");},3000); 

§

Все ответы не работают, чтобы проверить наличие элемента в jQuery. После многих лет кодирования только это решение не выдает никаких предупреждений о существовании или нет:

 if($(selector).get(0)) { // Do stuff } 

Или поручить вместо этого в начале вашей функции:

 if(!$(selector).get(0)) return; 

Разъяснения

В этом случае вам не нужно иметь дело с нулем | проблемы нулевой длины. Это заставляет выбирать элемент, а не считать их.

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector