Найти любой элемент формы

0

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

$('.focus:not(:hidden):first, :input:not(:hidden):first').focus();
Теги:

3 ответа

2
Лучший ответ

Селекторы, разделенные запятыми, не являются иерархическими, как вы указываете. Ваш селектор даст первый видимый .focus и первый видимый элемент ввода. Вам нужно разбить это на два селектора:

var focusElement = $('.focus:visible:first');

if(focusElement.length == 0)
    focusElement = $(':input:visible:first');

focusElement.focus();

Или, я полагаю, вы могли бы написать

$('.focus:visible:first, body:not(:has(.focus:visible)) :input:visible:first').focus();
  • 0
    +1 за последний подход. Гораздо проще :)
  • 1
    Это ужасное чтение, правда? Я думаю, что предпочитаю первое с точки зрения способности читать код и фактически понимать намерения программиста, пишущего его.
Показать ещё 1 комментарий
0

Ваш код действительно работал для меня. Взгляните на этот jsfiddle. Попробуйте удалить мой class='focus' а затем снова вернется к выбору первого поля ввода.

0

Я бы хотел легко понять модель:

var finder = $('.focus:not(:hidden):first');
finder = finder.length ? finder: $(':input:not(:hidden):first');
finder.focus();

Тот же результат, но, скорее всего, лучше, учитывая право на левый шипение: производительность

var finder = $('.focus').not(':hidden').eq(0);
finder = finder.length ? finder: $(':input').not(':hidden').eq(0);
finder.focus();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню