使用没有特定类的jQuery收集所有"可见"表单元素的最佳方法?

rst*_*rim 2 jquery

我正在尝试在给定表单上重新分配新的制表符索引.为此,我想排除任何不可见(不可见)的表单元素 - 并且还排除任何具有特定类(".offscreen")的表单元素.

我正在尝试这种方法 - 但是,它不起作用(也许不是最有效的方法).

function reassignTabOrders() {
    var tabindex = 1;
    $j('input,select,textarea').not('.offscreen').each(function() {
        var $input = $j(this);
        if ($input.is(':visible')) {
            $input.attr("tabindex", tabindex);
            tabindex++;
        }
    });
};
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Nic*_*ver 10

您可以使用:visible选择器:input,如下所示:

function reassignTabOrders() {
  $j(':input:visible:not(.offscreen)').each(function(i) {
     this.tabIndex = i+1;
  });
}
Run Code Online (Sandbox Code Playgroud)

这也使用.each()函数提供的索引来回调,不需要自己维护一个单独的变量:)在以后的jQuery版本中你可以使用函数缩短它(但不是那么快).attr(),如下所示:

function reassignTabOrders() {
  $j(':input:visible:not(.offscreen)').attr("tabindex", function(i) {
    return i+1;
  });
}
Run Code Online (Sandbox Code Playgroud)