Как проверить, соответствует ли селектор чему-либо в jQuery?[дубликат]

StackOverflow https://stackoverflow.com/questions/299802

Вопрос

На этот вопрос уже есть ответ здесь:

В 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()){ ... }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top