Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript缓存工具和技术_Javascript_Jquery_Scriptaculous - Fatal编程技术网

Javascript缓存工具和技术

Javascript缓存工具和技术,javascript,jquery,scriptaculous,Javascript,Jquery,Scriptaculous,我有一个要求,在这里,我想循环浏览页面上的所有下拉选择控件。我正在使用以下选项选择所有下拉控件: var DropDowns = document.getElementByTagName('select'); 我循环浏览这些下拉列表,以编程方式设置几个控件的选项: for (i=0; i<= DropDowns.Length; i++) { var CurrentControl = DropDowns[i]; CurrentControl.options[CurrentC

我有一个要求,在这里,我想循环浏览页面上的所有下拉选择控件。我正在使用以下选项选择所有下拉控件:

var DropDowns = document.getElementByTagName('select');
我循环浏览这些下拉列表,以编程方式设置几个控件的选项:

for (i=0; i<= DropDowns.Length; i++)
{
    var CurrentControl = DropDowns[i];
    CurrentControl.options[CurrentControl.selectedIndex].value = 1;
}
是否有支持缓存的Javascript框架?我想缓存所有的下拉控件名并循环缓存的名称,而不是直接循环文档对象


有什么诀窍可以提高循环的性能吗?

我认为对于只迭代30-40个元素的循环,您不会看到性能的巨大提高,但是一些浏览器将通过数组而不是节点列表或HTMLCollection(在一些实现DOM级别1的浏览器中被称为节点列表或HTMLCollection)进行循环,从而获得巨大的速度提升

因此,为了回答您的问题,您可以将对象等缓存在一个数组中,这样可以加快该循环,以备将来的迭代


请注意,您需要保持此数组的最新状态,因为它不像DOM那样处于活动状态。

在jquery中,它的外观如下所示:

var $menus = $('select');
$.each($menus, function(index, menu) {
    // Do whatever you want to the menu here
};

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

我认为您这样做的效率比一些答案所描述的要高得多。请记住,您并不是在文档中不断循环,而是在缓存的节点列表下拉列表中循环。如果您想更改这些元素中的每一个,那么您将不可避免地需要对它们进行循环以分别更改它们。

在您开始微优化之前,我们谈论的下拉控件有多少个?30到40个,但也可以更多。$。jQuery中的每一个。好吧,我想cookie可以做到这一点——第一次运行时,它会执行上述操作,并创建一个CSV字符串(比如选择名称)并将其写入cookie。添加一段代码来检查cookie,如果cookie存在并且有效,则使用其中的名称。但这是否会更快——谁知道呢?!我想可以测试一下。只需缓存DropDowns变量。除非动态创建新元素,否则无需每次调用document.getElementByTagName