Как проверить, соответствует ли селектор чему-либо в jQuery?[дубликат]
-
08-07-2019 - |
Вопрос
На этот вопрос уже есть ответ здесь:
- Есть ли функция «существует» для jQuery? 40 ответов
В Mootools я бы просто запустил if ($('target')) { ... }
.Делает if ($('#target')) { ... }
в jQuery работают так же?
Решение
Поскольку другие комментаторы предлагают наиболее эффективный способ сделать это:
if ($(selector).length ) {
// Do something
}
Если вам абсолютно необходима функция существует(), которая будет работать медленнее, вы можете сделать:
jQuery.fn.exists = function(){return this.length>0;}
Затем в вашем коде вы можете использовать
if ($(selector).exists()) {
// Do something
}
Как ответил здесь
Другие советы
нет, jquery всегда возвращает объект jquery независимо от того, совпал селектор или нет.Вам нужно использовать .length
if ( $('#someDiv').length ){
}
если вы использовали:
jQuery.fn.exists = function(){return ($(this).length > 0);}
if ($(selector).exists()) { }
вы бы предположили, что цепочка возможна, хотя это не так.
Это было бы лучше
jQuery.exists = function(selector) {return ($(selector).length > 0);}
if ($.exists(selector)) { }
Я думаю, что большинство ответивших здесь людей не совсем поняли вопрос, иначе я могу ошибаться.
Вопрос в том, как проверить, есть ли селектор существует в jQuery».
Большинство людей взяли это за то, что «как проверить, существует ли элемент в DOM с использованием jQuery». Вряд ли взаимозаменяется.
jQuery позволяет создавать собственные селекторы, но посмотрите, что произойдет, если вы попытаетесь использовать e перед его инициализацией;
$(':YEAH');
"Syntax error, unrecognized expression: YEAH"
После этого я понял, что это просто вопрос проверки.
if ($.expr[':']['YEAH']) {
// Query for your :YEAH selector with ease of mind.
}
Ваше здоровье.
Еще один способ:
$('#elem').each(function(){
// do stuff
});
if ($('#elem')[0]) {
// do stuff
}
Альтернативно:
if( jQuery('#elem').get(0) ) {}
Я предпочитаю
if (jQuery("#anyElement").is("*")){...}
Что в основном проверяет, является ли этот элемент своего рода «*» (любым элементом).Просто более чистый синтаксис, и «есть» имеет больше смысла внутри «если».
jQuery.fn.exists = function(selector, callback) {
var $this = $(this);
$this.each(function() {
callback.call(this, ($(this).find(selector).length > 0));
});
};
Для меня .exists
не работает, поэтому я использую индекс:
if ($("#elem").index() ! = -1) {}
сначала создайте функцию:
$.fn.is_exists = function(){ return document.getElementById(selector) }
затем
if($(selector).is_exists()){ ... }