不好意思,1000多行。 function check(f) { var all = f.all.length for(var i=0;i <=all ;i++) { tmpobject=null; tmpobject=f.all[i]; if(tmpobject) { if(tmpobject.type=="checkbox") { if(!tmpobject.disabled) { tmpobject.checked=form1.allcheck.checked; } } } } }
function check(f) { var a = f.all.length for(var i=0;i <=a ;i++) { tmpobject=null; tmpobject=f.all[i]; if(tmpobject) { if(tmpobject.type=="checkbox") { if(!tmpobject.disabled) { tmpobject.checked=form1.allcheck.checked; } } } } }
帮你优化了下,去掉个全局变量 function check(f) { var a = document.getElementsByTagName("input"); for(var i=0;i <=a.length ;i++) { if(a[i]&&a[i].type=="checkbox"&&!a[i].disabled) { a[i].checked=form1.allcheck.checked; } } }
一点就全选了~~没那么慢 啊~~10000条的时候慢~~<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME="Generator" CONTENT="EditPlus"> <META NAME="Author" CONTENT=""> <META NAME="Keywords" CONTENT=""> <META NAME="Description" CONTENT=""> </HEAD> <BODY> <input type="button" value="SelectAll" onclick="selectAll()"/> <SCRIPT LANGUAGE="JavaScript"> var table=document.createElement("TABLE"); table.id="tbl"; var tbody = document.createElement("TBODY"); for(var i=0;i<1000;i++) { var tr=document.createElement("TR"); var td =document.createElement("TD"); var checkbox=document.createElement("INPUT"); checkbox.type="checkbox"; checkbox.name="checkbox"; td.appendChild(checkbox); tr.appendChild(td); tbody.appendChild(tr); } table.appendChild(tbody); document.body.appendChild(table); function selectAll() { var table=document.getElementById("tbl"); for(var i=0;i<table.rows.length;i++) { table.rows[i].cells[0].childNodes[0].checked=true; } } </SCRIPT>
</BODY> </HTML>
谢谢楼上的,请问a[i]&&是什么意思。 我修改为 function check(f) { var a = document.getElementsByTagName("input"); var aa = a.length; for(var i=0;i <=aa ;i++) { if(a[i]&&a[i].type=="checkbox"&&!a[i].disabled) { a[i].checked=form1.allcheck.checked; } } } 速度又快点。现在600行,5s钟。还有优化的空间吗?谢谢。
&& 逻辑判断符 与
就是所有条件为真才继续执行,又给你优化了下,应该会再提高点速度<script> function check(f) { var a = document.getElementsByTagName("input"); var aa = a.length; var isForm1check=form1.allcheck.checked for(var i=0;i <=aa ;i++) { var tmpa=a[i] if(tmpa&&tmpa=="checkbox"&&!tmpa.disabled) { tmpa.checked=isForm1check; } } } </script>
这个是全部代码:有哪里还可以优化。<script language ="javascript" type ="text/javascript"> function check(f) { var a = document.getElementsByTagName("input"); var aa = a.length; for(var i=0;i <=aa ;i++) { if(a[i].type=="checkbox"&&!a[i].disabled) { a[i].checked=form1.allcheck.checked; } } } function addCheckEvent() { show() var objs=document.getElementsByTagName("INPUT"); var n = objs.length; for(var i=1;i < n ;i++) { if(objs[i].type=="checkbox") { objs[i].onclick=show } } } function show() { var objs=document.getElementsByTagName("INPUT"); var ifAllChecked=true; var ss = objs.length; for(var i=1;i < ss;i++) { if(objs[i].type=="checkbox") { if(!objs[i].checked) { ifAllChecked=false; break; } } } document.getElementById("allcheck").checked=ifAllChecked } </script>
<input type='checkbox' onclick='check("cid",this.checked)'/>点我全选<br/> <input type='checkbox' name='cid'/><br/> <input type='checkbox' name='cid'/><br/> <input type='checkbox' name='cid'/> <script type='text/javascript'> function check(name,t) { var a = document.getElementsByName(name); var aa = a.length; for(var i=0;i<aa ;i++) { a[i].checked = t; } }
尽量减少查询的次数和查询到的对象值: 1. 给所有需要全选的checkbox取相同的name,比如name="n"//用1个全局变量保存查询到的所有checkbox,这些下次点击"全选"或者"取消全选 "的时候就不需要查找DOM,速度快不少 var nAll =null; function check(f) { if(nAll ==null) nAll = document. getElementsByName("n"); var aa = nAll.length; //先用1个变量记住form1.allcheck是否选择,如果把form1.allcheck.checked放到循环中,每次循环都需要在DOM中查找allcheck,影响效率 var ch = form1.allcheck.checked; for(var i=0;i <=aa ;i++) { nAll[i].checked= ch; } }
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <script type="text/javascript"> function $(id){ if(document.getElementById){ return document.getElementById(id); } } window.onload = function(){ var checkboxAllObj = $('checkBoxAll'); checkboxAllObj.onclick = function(){ var checkBoxArray = document.getElementsByName('checkboxName'); if(checkboxAllObj.checked){ for(var i = 0 ; checkBoxArray[i]; i++){ checkBoxArray[i].checked = true; } }else{ for(var i = 0 ; checkBoxArray[i]; i++){ checkBoxArray[i].checked = false; } }
function check(f)
{
var all = f.all.length
for(var i=0;i <=all ;i++)
{
tmpobject=null;
tmpobject=f.all[i];
if(tmpobject)
{
if(tmpobject.type=="checkbox")
{
if(!tmpobject.disabled)
{
tmpobject.checked=form1.allcheck.checked;
}
}
}
}
}
{
var a = f.all.length
for(var i=0;i <=a ;i++)
{
tmpobject=null;
tmpobject=f.all[i];
if(tmpobject)
{
if(tmpobject.type=="checkbox")
{
if(!tmpobject.disabled)
{
tmpobject.checked=form1.allcheck.checked;
}
}
}
}
}
function check(f)
{
var a = document.getElementsByTagName("input");
for(var i=0;i <=a.length ;i++)
{
if(a[i]&&a[i].type=="checkbox"&&!a[i].disabled)
{ a[i].checked=form1.allcheck.checked;
} }
}
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD> <BODY>
<input type="button" value="SelectAll" onclick="selectAll()"/>
<SCRIPT LANGUAGE="JavaScript">
var table=document.createElement("TABLE");
table.id="tbl";
var tbody = document.createElement("TBODY");
for(var i=0;i<1000;i++)
{
var tr=document.createElement("TR");
var td =document.createElement("TD");
var checkbox=document.createElement("INPUT");
checkbox.type="checkbox";
checkbox.name="checkbox";
td.appendChild(checkbox);
tr.appendChild(td);
tbody.appendChild(tr);
} table.appendChild(tbody);
document.body.appendChild(table); function selectAll()
{
var table=document.getElementById("tbl");
for(var i=0;i<table.rows.length;i++)
{
table.rows[i].cells[0].childNodes[0].checked=true;
}
}
</SCRIPT>
</BODY>
</HTML>
我修改为
function check(f)
{
var a = document.getElementsByTagName("input");
var aa = a.length;
for(var i=0;i <=aa ;i++)
{
if(a[i]&&a[i].type=="checkbox"&&!a[i].disabled)
{ a[i].checked=form1.allcheck.checked;
} }
}
速度又快点。现在600行,5s钟。还有优化的空间吗?谢谢。
function check(f)
{
var a = document.getElementsByTagName("input");
var aa = a.length;
var isForm1check=form1.allcheck.checked
for(var i=0;i <=aa ;i++)
{
var tmpa=a[i]
if(tmpa&&tmpa=="checkbox"&&!tmpa.disabled)
{
tmpa.checked=isForm1check;
} }
}
</script>
function check(f)
{
var a = document.getElementsByTagName("input");
var aa = a.length;
for(var i=0;i <=aa ;i++)
{
if(a[i].type=="checkbox"&&!a[i].disabled)
{ a[i].checked=form1.allcheck.checked;
} }
} function addCheckEvent()
{
show()
var objs=document.getElementsByTagName("INPUT");
var n = objs.length;
for(var i=1;i < n ;i++)
{
if(objs[i].type=="checkbox")
{
objs[i].onclick=show
}
}
}
function show()
{
var objs=document.getElementsByTagName("INPUT");
var ifAllChecked=true;
var ss = objs.length;
for(var i=1;i < ss;i++)
{
if(objs[i].type=="checkbox")
{
if(!objs[i].checked)
{
ifAllChecked=false;
break;
}
}
}
document.getElementById("allcheck").checked=ifAllChecked
}
</script>
<input type='checkbox' name='cid'/><br/>
<input type='checkbox' name='cid'/><br/>
<input type='checkbox' name='cid'/>
<script type='text/javascript'>
function check(name,t)
{
var a = document.getElementsByName(name);
var aa = a.length;
for(var i=0;i<aa ;i++)
{
a[i].checked = t;
}
}
1. 给所有需要全选的checkbox取相同的name,比如name="n"//用1个全局变量保存查询到的所有checkbox,这些下次点击"全选"或者"取消全选 "的时候就不需要查找DOM,速度快不少
var nAll =null;
function check(f)
{
if(nAll ==null)
nAll = document. getElementsByName("n");
var aa = nAll.length;
//先用1个变量记住form1.allcheck是否选择,如果把form1.allcheck.checked放到循环中,每次循环都需要在DOM中查找allcheck,影响效率
var ch = form1.allcheck.checked;
for(var i=0;i <=aa ;i++)
{
nAll[i].checked= ch;
}
}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript">
function $(id){
if(document.getElementById){
return document.getElementById(id);
}
}
window.onload = function(){
var checkboxAllObj = $('checkBoxAll');
checkboxAllObj.onclick = function(){
var checkBoxArray = document.getElementsByName('checkboxName');
if(checkboxAllObj.checked){
for(var i = 0 ; checkBoxArray[i]; i++){
checkBoxArray[i].checked = true;
}
}else{
for(var i = 0 ; checkBoxArray[i]; i++){
checkBoxArray[i].checked = false;
}
}
};
}
</script>
</head>
<body>
全选<input type="checkbox" id="checkBoxAll" name="checkboxAllName"/>
<table style="width:800px;border: 1 solid black;">
<%
for(int i = 0 ; i < 15000; i++){//注释:我这里生成的是15000行的数据表格,选择速度,就是瞬间实现。我还试验了 150000 行,选择时间大概是 2.5s
%>
<tr style="background-color:silver;">
<td style="width:10%;">No.<%=(i + 1) %></td>
<td style="width:10%;"><input type="checkbox" name="checkboxName"/></td>
<td>hello</td>
</tr>
<%
}
%>
</table>
</body>
</html>
第一中情况:
var all = document.getElementsByName('checkboxName');
for(var i = 0; i < all.length; i++){
all[i].checked = true;
}
第二种情况: var all = document.getElementsByName('checkboxName');
for(var i = 0; all[i]; i++){
all[i].checked = true;
}当数据量很大的时候,第二种循环方法的速度远远高于第一种循环方法。不信你可以试验一下。--- 记得:给分哦