我现在用的是以下方法
for (var j = 0; j < $get(rightBox).options.length; j++) {}但发现如果当数据量大时,就会非常慢,如达到10000条记录,有什么办法可以处理大数据量的遍历呢?谢了!
for (var j = 0; j < $get(rightBox).options.length; j++) {}但发现如果当数据量大时,就会非常慢,如达到10000条记录,有什么办法可以处理大数据量的遍历呢?谢了!
首先改成这样
而且10000条数据稍嫌多,客户使用起来也不怎么方便,可以模拟个下拉框,结合ajax autocomplete.
for (var i = 0, n = items.Tables[0].Rows.length; i < n; i++) {
var addOption = document.createElement("option");
addOption.text = items.Tables[0].Rows[i].Description;
addOption.value = items.Tables[0].Rows[i].CODE;
$get(listbox).add(addOption);
}
其中items是使用AjaxMethod返回的一个dataset,由于要获取所有数据让用户使用,所以数量会比较多,至于8楼说的放到一个JS变量里,那最终也需要生成select的,而且现在已经是从JS变量里去操作的了,主要是循环和构建的过程太慢了
<html>
<body>
<div id='temp'>
</div>
<script type='text/javascript'>
var $ = function($){return document.getElementById($);}
var k=[];
k.push("<select id='ff' name='ff'>");
for(var i=0;i<10000;i++){
k.push("<option value='"+i+"'>"+i+"</option>");
}
k.push("</select>");
$('temp').innerHTML = k.join("");
</script>
</body>
</html>
for (; i < l; i++) {
var addOption = document.createElement("option");
addOption.text = rows[i].Description;
addOption.value = rows[i].CODE;
obj.add(addOption);
}
用innerHTML会快很多的
嗯,这个方法应该不错,只是现在我的需求还有点变化,就是我要对现有已存在的select去操作的,如果按上面的方法,我可能需要修改很多代码才能实现哦:(
<body>
<select id='ff' name='ff'>
</select>
<script type='text/javascript'>
var $ = function($){return document.getElementById($);}
var k=[];
k.push("<select id='ff' name='ff'>");
for(var i=0;i<10000;i++){
k.push("<option value='"+i+"'>"+i+"</option>");
}
k.push("</select>");
$('ff').outerHTML = k.join("");
</script>
</body>
</html>
这样就用不着改了吧
逻辑代码如下
<html>
<body>
<select id='ff' name='ff'>
</select>
<script type='text/javascript'>
var $ = function($){return document.getElementById($);}
var k=[],k2=[];
k.push("<select id='ff' name='ff'>");
for(var i=0;i<10000;i++){
k.push("<option value='"+i+"'>"+i+"</option>");
k2.push("<option value='"+i+"'>"+i+"</option>");
}
k.push("</select>");
if(ie){
$('ff').outerHTML = k.join("");
}
else if(firefox){
$('ff').innerHTML = k2.join("");
}
</script>
</body>
</html>
That's great!!!
这样用后速度简直不用等,马上就全部显示出来了,呵呵,谢谢大家的帮助啦!!!