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


127

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

$("#elementId")...

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

alert($("#idThatDoesnotexist"));

Ответы:


188

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

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

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


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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.