Визначення того, чи jQuery не знайшов жодного елемента


126

Я використовую селектори jQuery, особливо селектор id:

$("#elementId")...

Як слід визначити, знайшов елемент jQuery чи ні? Навіть якщо елемента із вказаним ідентифікатором не існує, наступне твердження дайте мені:[object Object]

alert($("#idThatDoesnotexist"));

Відповіді:


187

$('#idThatDoesnotexist').lengthце те, що ви шукаєте. (Якщо він нічого не знайде, це буде === 0). Отже, ваше умовне твердження повинно бути:

if ($ ('# id'). length) {/ * код, якщо його знайдено * /} else {/ * код, якщо його не знайдено * /}

Ви отримуєте об'єкт, повернутий із цього попередження, оскільки jQuery (майже) завжди повертає "jQuery об'єкт", коли ви використовуєте його, що є обгорткою для елементів, знайдених jQuery, що дозволяє ланцюжок методів.


3
Вам не потрібен нуль, $ ('# id'). Досить довжини (нуль == false у javascript)
Девід Хеллінг

13
@ Зауважте, що вам це не потрібно, це не обов'язково робить його зайвим, на перший погляд IMO це робить більш зрозумілим.
Абір

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.