js实现全选与反选,在IE和火狐中用Js的childNodes返回的结果是不同的。
IE是将一个完整标签作为一个节点。而 Firefox除了上述的的情况外,也把一个标签的结束符“>”到下一个标签的起始符“<”之间的内容(除注释外,包括任何的文字、空格、回 车、制表符)也算是一个节点了。
而且,这种节点也有其独特的属性和值--nodeName="#text"。
要在IE和火狐中兼容childNodes,则必须在火狐中滤掉那些多余的叫#text的节点。
例子,在IE和火狐上兼容的全选,反选和不选的js代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=GBK" />
<style type="text/css">
li{
display: inline;
list-style:none;
}
#pan_testAll,#pan_testNall,#pan_testNone{
cursor:pointer;;
}
</style>
</head>
<body>
//Js实现全选与反选
<div>
<ul class="pan_testMenue" id="pan_testMeneueId">
<li id="pan_testAll">全选</li>
<li id="pan_testNall">反选</li>
<li id="pan_testNone">不选</li>
</ul>
</div>
<div>
<ul id="pan_testUlInfoId">
<li><input type="checkbox" id="pan_testInfo">资料</li>
<li><input type="checkbox" id="pan_testResume">简历</li>
<li><input type="checkbox" id="pan_testOther">其他</li>
</ul>
</div>
<script type="text/javascript">
(function(){
var ul1 = document.getElementById("pan_testMeneueId").childNodes;
var ul2 = document.getElementById("pan_testUlInfoId").childNodes;
var click = new Array();
click[0] = function(){
for(var i = 0; i < ul2.length; i ++){
if(ul2[i].nodeName != "#text"){ //滤掉无用节点
var temp1 = ul2[i].firstChild;
temp1.checked = true;
}
}
}; // www.jb200.com
click[1] = function(){
for(var j = 0; j < ul2.length; j ++){
var temp2 = ul2[j].firstChild; //获得li的子节点
if(ul2[j].nodeName != "#text"){ //滤掉无用节点
if(temp2.checked){
temp2.checked = false;
}else{
temp2.checked = true;
}
} }
};
click[2] = function(){
for(var h = 0; h < ul2.length; h ++){
if(ul2[h].nodeName != "#text"){ //滤掉无用节点
var temp3 = ul2[h].firstChild;
temp3.checked = false;
}
}
};
function init(){ //初始化
var index = 0;
for(var n = 0; n < ul1.length; n ++){ //为每个li绑定一个单击事件
if(ul1[n].nodeName != "#text"){ //滤掉无用节点
if(ul1[n].addEventListener){
ul1[n].addEventListener("click",click[index++],false);
}else{
ul1[n].attachEvent("onclick",click[index++]);
}
}
}
}
window.onload = init;
}());
</script>
</body>
</html>