Определение того, не нашел ли jQuery никаких элементов

127

Я использую селекторы jQuery, особенно селектор id:

$("#elementId")...

Как мне определить, нашел ли элемент jQuery или нет? Даже если элемент с указанным идентификатором не существует, следующий оператор даст мне:[object Object]

alert($("#idThatDoesnotexist"));
Bardock
источник

Ответы:

188

$('#idThatDoesnotexist').lengthэто то, что вы ищете. (Если ничего не найдено, это будет === 0.) Итак, ваш условный оператор, вероятно, должен быть таким:

if ($ ('# id'). length) {/ * код, если найден * /} else {/ * код, если не найден * /}

Вы получаете объект, возвращенный из этого предупреждения, потому что jQuery (почти) всегда возвращает «объект jQuery», когда вы его используете, который является оболочкой для найденных элементов jQuery, которая разрешает цепочку методов.

futuraprime
источник
3
Вам не нужен ноль, достаточно $ ('# id'). Length (ноль == false в javascript)
Дэвид Хеллсинг,
13
@ Дэвид тот факт, что вам это не нужно , не обязательно делает его избыточным, на первый взгляд IMO это делает его более понятным.
Abir
1
@Abir: Это только проясняет ситуацию, пока вы не привыкнете к синтаксису без него, проверяя его на истинность, а не явно 0. Я предлагаю просто привыкнуть к синтаксису без него == 0, вы увидите его везде.
Скотт Стаффорд
@ScottStafford, для большего зазора вы также можете использовать if (!!$('#id').length), которые выполняют логическое приведение.
Даниэле Врут
6
Вы также должны подумать, компенсируют ли преимущества сохранения пары символов потенциальную путаницу, когда кто-то, не знакомый с нюансами Javascript, читает код. На мой взгляд, это не лучшая практика с точки зрения ремонтопригодности.
Мэтт Карр,
26

Futuraprime прав, но вы можете сократить синтаксис, выполнив следующие действия:

if ($("#id").length) {
   //at least one element was found
} else {
   //no elements found
}
Джон Хартсок
источник
11
!$.isEmptyObject($.find('#id'))

Это вернет истину, если элемент существует, и ложь, если нет.

СПА
источник
7
$('#my_selector').length > 0 
$('#my_selector').get(0) !== undefined
$('#my_selector')[0] !== undefined

Это основное, теперь делайте все, что хотите.

Blackjoker
источник