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

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

в Mootools, я бы просто побежал if ($('target')) { ... }. Делает if ($('#target')) { ... } в jQuery работают одинаково?

11 ответов


поскольку другие комментаторы предлагают наиболее эффективный способ сделать это, кажется,:

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

Если вы абсолютно должны иметь функцию exists () - которая будет медленнее-вы можете сделать:

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

тогда в вашем коде вы можете использовать

if ($(selector).exists()) {
    // Do something
}

ответ здесь


нет, jquery всегда возвращает объект jquery независимо от того, был ли селектор сопоставлен или нет. Вам нужно использовать .длина

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()){ ... }