<script language="javascript">
function nodeClick(o){
var obj, chk, disp, level, selectValue // 定义变量不说了吧
obj = event.srcElement; // 将event的srcElement属性赋予obj,注:IE下。此属性和DOM的target属性兼容
// srcElement是指发生事件的文档元素
if (obj == o) // 如果obj与传过来的参数o相等,则返回
return;
// ----------------这一段的效果是将用户选择了哪几个checkbox显示出来
// 如果元素是INPUT
if (obj.tagName == "INPUT") {
chk = obj.checked; // 将元素的checked值赋予chk,true or false
// 取得input元素的父元素的样式的第2个字符,即下面的内联样式表中的id为tree,class为l1,l2,l3,l4的那些东西,取得值为1,2,3,4
level = parseInt(obj.parentElement.className.substring(1));
// 遍历input的父层所有相邻元素
while (obj.parentElement.nextSibling && parseInt(obj.parentElement.nextSibling.className.substring(1)) > level) {
obj = obj.parentElement.nextSibling.all.tags("INPUT")[0]; // 又通过父元素找父下面的input子元素
obj.checked = chk; // 赋予值,true or false
}
// 作为最上端显示用,不过个人觉得直接用"selectedText"这样写不太严格
selectedText.innerHTML = "U have selected: <b>" + getTreeValue() + " </b>"; // 调用了getTreeValue()方法,下有解释
return;
}
// 如果元素不存在相邻节点了,则返回
if (!obj.nextSibling)
return;
// ----------------这一段的效果是折叠树
disp = obj.nextSibling.style.display != "none" ? "none" : "block"; // 如果相邻节点的style下的display属性不等于none,则
// 将它(display)设为none,否则设为block
level = parseInt(obj.className.substring(1));
// 遍历obj的相邻节点
while (obj.nextSibling && parseInt(obj.nextSibling.className.substring(1)) > level) {
obj = obj.nextSibling;
obj.style.display = disp; // 设display属性,显示或折叠起来
}
}
// 此函数为取得已选择的节点,已选择的就把checkbox的值存入数组中
function getTreeValue(){
var val = [];
var objs = document.getElementById("tree").all.tags("INPUT");
for (var i = 0; i < objs.length; i++)
if (objs[i].checked)
val.push(objs[i].value);
return val.join(",");
}
</script>
function nodeClick(o){
var obj, chk, disp, level, selectValue // 定义变量不说了吧
obj = event.srcElement; // 将event的srcElement属性赋予obj,注:IE下。此属性和DOM的target属性兼容
// srcElement是指发生事件的文档元素
if (obj == o) // 如果obj与传过来的参数o相等,则返回
return;
// ----------------这一段的效果是将用户选择了哪几个checkbox显示出来
// 如果元素是INPUT
if (obj.tagName == "INPUT") {
chk = obj.checked; // 将元素的checked值赋予chk,true or false
// 取得input元素的父元素的样式的第2个字符,即下面的内联样式表中的id为tree,class为l1,l2,l3,l4的那些东西,取得值为1,2,3,4
level = parseInt(obj.parentElement.className.substring(1));
// 遍历input的父层所有相邻元素
while (obj.parentElement.nextSibling && parseInt(obj.parentElement.nextSibling.className.substring(1)) > level) {
obj = obj.parentElement.nextSibling.all.tags("INPUT")[0]; // 又通过父元素找父下面的input子元素
obj.checked = chk; // 赋予值,true or false
}
// 作为最上端显示用,不过个人觉得直接用"selectedText"这样写不太严格
selectedText.innerHTML = "U have selected: <b>" + getTreeValue() + " </b>"; // 调用了getTreeValue()方法,下有解释
return;
}
// 如果元素不存在相邻节点了,则返回
if (!obj.nextSibling)
return;
// ----------------这一段的效果是折叠树
disp = obj.nextSibling.style.display != "none" ? "none" : "block"; // 如果相邻节点的style下的display属性不等于none,则
// 将它(display)设为none,否则设为block
level = parseInt(obj.className.substring(1));
// 遍历obj的相邻节点
while (obj.nextSibling && parseInt(obj.nextSibling.className.substring(1)) > level) {
obj = obj.nextSibling;
obj.style.display = disp; // 设display属性,显示或折叠起来
}
}
// 此函数为取得已选择的节点,已选择的就把checkbox的值存入数组中
function getTreeValue(){
var val = [];
var objs = document.getElementById("tree").all.tags("INPUT");
for (var i = 0; i < objs.length; i++)
if (objs[i].checked)
val.push(objs[i].value);
return val.join(",");
}
</script>
1. if (!obj.nextSibling)
return;
2. obj = obj.nextSibling;
类型转换,当一个非空对象用在boolean环境中时,它就会被转换成true