0

我试图找到一个类是否存在,如果不只是找到第一个表单元素。我该如何写:输入?这似乎不起作用。

$('.focus:not(:hidden):first, :input:not(:hidden):first').focus();
4

3 回答 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();
于 2013-09-23T21:52:52.813 回答
0

你的代码实际上对我有用。看看这个 jsfiddle。尝试删除我的class='focus',然后它会回退到选择第一个输入字段。

于 2013-09-23T21:49:22.450 回答
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();
于 2013-09-23T22:02:37.133 回答