Для того, чтобы проверить существует или нет заданный элемент, можно использовать 2 способа. В основе всего, лежит тот факт, что jQuery селекторы возвращают массив и мы можем искать его длину. Даже если найден только 1 элемент (когда мы конкретный элемент ищем) то размер ответа будет равен 1.
Способ первый - стандартный:
if($("#findID").length>0) { // exists } //еще проще: if($("#findID").length) { // exists } // Еще вариант: if($('#findID')[0]) { // exists }
Способ второй - удобный (создадим пользовательскую функцию exists() ):
// Один раз объявляем функцию, потом используем так, как в примере jQuery.fn.exists = function() { return $(this).length; } // Пример использования: if($("#findID").exists()) { // exists }
Можно и так:
jQuery.exists = function(selector) { return ($(selector).length > 0); } // Пример использования: if ($.exists(selector)) { // exists }
пасибо, бро
ОтветитьУдалитьСпасибо
ОтветитьУдалитьif ($("input").is("#id_question"))
ОтветитьУдалить.is() вроде специально для такой проверки и создан
is() проверяет много чего, он как ругулярка проходит по атрибутам узла, но мне кажется, что .length сработает быстрее, так как это уже есть установленное свойство, которое достаточно только вычитать, а is() будет выполнять поиск по заданному условию в рамках атрибута узла - что будет явно медленнее.
УдалитьРеализация метода is() в jQuery 1.7:
is: function( selector ) {
return !!selector && (
typeof selector === "string" ?
POS.test( selector ) ?
jQuery( selector, this.context ).index( this[0] ) >= 0 :
jQuery.filter( selector, this ).length > 0 :
this.filter( selector ).length > 0 );
}
Где POS.test(selector) - регулярное выражение, которое ВСЕГДА выполняется если задан селектор.
Само регулярное выражение:
POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/
я думаю что $("#id").length сработает быстрее ;)
Спасиб
ОтветитьУдалитьСпасибо, очень помогли функции! :)
ОтветитьУдалитьвы только плодите сущности добавляя ненужные методы, что мешает просто писать:
ОтветитьУдалитьif($(...).size()){
...
}else{
...
}
ничего не мешает, реализация метода size() в jquery 1.8.2:
Удалитьsize: function() { return this.length; }
Уж лучше:
if($("#findID").length) { .... }
А как проверить существование элемента с двумя классами? Например, если существует блок, у которого class="myClass1 current" тогда что-либо делать.
ОтветитьУдалитьif( $(".myClass1.current").lenght ){ ... }
Удалитьif($('.myClass1').hasClass('current)) {
ОтветитьУдалить// существует ..
}
если есть возможность добавить класс то да, а если там id то нет
УдалитьЕЕЕеее!
ОтветитьУдалитьДумаю что следующая инструкция более быстрее и надежнее будет.
ОтветитьУдалитьif($("#findID").length) {
// exists
}
спасибо бро. ты настоящий бро!
ОтветитьУдалить+
ОтветитьУдалитьСпасибо! Долго искал как проверить элемент на существование
ОтветитьУдалитьСпасибо. Ваши советы помогли решить мою задачу.
ОтветитьУдалитьА как проверить существование элемента на странице, которого не было до её загрузки, который был добавлен на страницу средствами JQuery или JavaScript?
ОтветитьУдалитьточно также, главное функция проверки должна быть вызвана после вставки. Если есть большой кусок чужого когда который это делает синхронно, то можно проверку выполнить в нулевом setTimeout(()=>{ if($("#findID").length) {
Удалить...
}
},0);