我试图找到一个类是否存在,如果不只是找到第一个表单元素。我该如何写:输入?这似乎不起作用。
$('.focus:not(:hidden):first, :input:not(:hidden):first').focus();
我试图找到一个类是否存在,如果不只是找到第一个表单元素。我该如何写:输入?这似乎不起作用。
$('.focus:not(:hidden):first, :input:not(:hidden):first').focus();
逗号分隔的选择器不像您所指示的那样分层。您的选择器将产生第一个可见的.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();
你的代码实际上对我有用。看看这个 jsfiddle。尝试删除我的class='focus'
,然后它会回退到选择第一个输入字段。
我会选择易于理解的模型:
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();