在使用treeview之前,html文档中需要包含几个jquery.js、jquery.treeview.js、jquery.treeview.css几个文件。jquery.js的引用必须在jquery.treeview.js之前。
js功能实现:
<script type="text/javascript">
$(function(){
$("#root").treeview();
//给所有的权限复选框添加事件
$("[name=privilegeIds]").click(function () {
//自己选中或者取消时,把所有下级权限也同时选中或者取消
$(this).siblings("ul").find("input").attr("checked", this.checked);
//当选中一个权限时,也要同时选中所有的直系上级权限
if(this.checked){
$(this).parents("li").children("input").attr("checked", true);
}
// 当取消一个权限时,同级没有选中的权限了,就也取消他的上级权限,再向上也这样做。
else{
if( $(this).parent().siblings("li").children("input:checked").size() == 0 ){
$(this).parent().parent().siblings("input").attr("checked", false);
var start = $(this).parent().parent();
if( start.parent().siblings("li").children("input:checked").size() == 0 ){
start.parent().parent().siblings("input").attr("checked", false);
}
}
}
})
})
</script>
topPrivilegeList 为数据库中查询到的顶级权限列表,用于遍历。
<ul id="root">
<%--第一级显示--%>
<s:iterator value="#topPrivilegeList">
<li>
<input type="checkbox" name="privilegeIds" value="${id}" id="cb_${id}" <s:property value="%{id in privilegeIds ? 'checked' : ''}"/>/>
<label for="cb_${id}"><span class="folder">${name}</span></label>
<%--第二级显示--%>
<ul>
<s:iterator value="children">
<li>
<input type="checkbox" name="privilegeIds" value="${id}" id="cb_${id}" <s:property value="%{id in privilegeIds ? 'checked' : ''}"/>/>
<label for="cb_${id}"><span class="folder">${name}</span></label>
<%--第三级显示--%>
<ul>
<s:iterator value="children">
<li>
<input type="checkbox" name="privilegeIds" value="${id}" id="cb_${id}" <s:property value="%{id in privilegeIds ? 'checked' : ''}"/>/>
<label for="cb_${id}"><span class="folder">${name}</span></label>
</li>
</s:iterator>
</ul>
</li>
</s:iterator>
</ul>
</li>
</s:iterator>
</ul>
文中js代码是模仿网上一老师写的,个人js功底太烂,感觉这段js对jquery的选择器,筛选.查找的方法运用的比较有意思,故积累下来,以便日后学习。