0

我有一个要求,我想循环浏览页面上的所有 DropDown(选择)控件。我正在使用以下方法选择所有 DropDown 控件:

var DropDowns = document.getElementByTagName('select');

我遍历这些 DropDowns 以编程方式设置几个控件的选项:

for (i=0; i<= DropDowns.Length; i++)
{
    var CurrentControl = DropDowns[i];
    CurrentControl.options[CurrentControl.selectedIndex].value = 1;
}

是否有任何支持缓存的 Javascript 框架?我想缓存所有 DropDown 控件名称并循环通过缓存的名称,而不是直接循环通过 Document 对象。

有什么技巧可以提高循环的性能吗?

4

4 回答 4

1

我不认为你会看到一个只遍历 30-40 个元素的循环的性能有很大的改进,但是一些浏览器会通过遍历一个数组而不是 aNodeListHTMLCollection原样来获得巨大的速度提升在一些实现 DOM 级别 1 的浏览器中调用。

因此,要回答您的问题,您可以将对象等“缓存”在一个数组中,并且它应该为将来的迭代加速该循环。

请注意,您需要使该数组保持最新,因为它不像 DOM 那样“实时”。

于 2013-02-21T18:12:18.070 回答
0

在 jquery 中,它看起来像这样:

var $menus = $('select');
$.each($menus, function(index, menu) {
    // Do whatever you want to the menu here
};
于 2013-02-21T18:15:04.367 回答
0

我建议一种不同的方法 - 使用逗号分隔值将选项保存在隐藏字段中,并在页面加载时通过解析分隔值来设置控件值。

于 2013-02-21T18:17:38.347 回答
0

我认为您已经比某些答案描述的更有效率。请记住,您不是在不断循环浏览文档,而是循环浏览缓存NodeListDropDowns. 如果您想更改这些元素中的每一个,那么您将不可避免地需要循环访问它们以单独更改它们。

于 2013-02-21T18:21:51.810 回答