ztree : checkbox 选中/不选中时动态添加/删除DOM元素
先上代码。
var IDMark_Switch = "_switch",
IDMark_Icon = "_ico",
IDMark_Span = "_span",
IDMark_Input = "_input",
IDMark_Check = "_check",
IDMark_Edit = "_edit",
IDMark_Remove = "_remove",
IDMark_Ul = "_ul",
IDMark_A = "_a"; var setting = {
check: {
enable: true,
chkboxType: { "Y": "", "N": "" }
},
callback: {
onCheck: onCheck
}
}; var zNodes =[
{id:1, name:"hover事件显示控件", open:true,
children:[
{id:11, name:"按钮1"},
{id:12, name:"按钮2"},
{id:13, name:"下拉框"},
{id:141, name:"文本1"},
{id:142, name:"文本2"},
{id:15, name:"超链接"} ]},
{id:2, name:"始终显示控件", open:true,
children:[
{id:21, name:"按钮1"},
{id:22, name:"按钮2"},
{id:23, name:"下拉框"},
{id:24, name:"文本"},
{id:25, name:"超链接"}
]}
]; function onCheck(e, treeId, treeNode) {
var flagBoolean
// 从没有点击 到 点击 flagBoolean 1
// 从点击 到 没有点击 flagBoolean 2
// 都不是 flagBoolean 0 // console.log(e)
// console.log(treeId)
// console.log(treeNode) // ?
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
// var node = zTree.getNodeByParam("id",fileSucessdData[0].rid);
// zTree.selectNode(node); var nodes = zTree.getChangeCheckedNodes(); // console.log(nodes[0]) for (var n in nodes) {
if (nodes[n].checked && !nodes[n].checkedOld) {
flagBoolean = 1
} else if (!nodes[n].checked && nodes[n].checkedOld) {
flagBoolean = 2
} else {
flagBoolean = 0
}
nodes[n].checkedOld = nodes[n].checked
} // console.log(nodes) var node = nodes[0] var aObj = $("#" + node.tId + IDMark_A); console.log(aObj) if (flagBoolean === 1) {
if ($("#diyBtn_"+treeNode.id).length>0) return;
var editStr = "<input id='diyBtn_" +treeNode.id+ "' title='"+treeNode.name+"' />";
aObj.after(editStr);
var btn = $("#diyBtn_"+treeNode.id);
} else if (flagBoolean === 2) {
if (treeNode.parentTId && treeNode.getParentNode().id!=1) return;
$("#diyBtn_"+treeNode.id).unbind().remove();
$("#diyBtn_space_" +treeNode.id).unbind().remove();
} // aObj.click(); // $("#"+node.tId+"_span").click();
// end
} $(document).ready(function(){
$.fn.zTree.init($("#treeDemo"), setting, zNodes);
});
讲一下这个是怎么实现的。
首先是 zTree.getChangeCheckedNodes() 方法的坑。
API说:
获取输入框勾选状态被改变的节点集合(与原始数据 checkedOld 对比)。[setting.check.enable = true 时有效]
请通过 zTree 对象执行此方法。
但是API还说:
如果需要获取每次操作后全部被改变勾选状态的节点数据,请在每次勾选操作后,遍历所有被改变勾选状态的节点数据,让其 checkedOld = checked 就可以了。
所以,需要在方法中手动设置一下checkedOld。
for (var n in nodes) {
nodes[n].checkedOld = nodes[n].checked
}
这样,触发方法时,才会是 只有改变check状态的节点对象进入 nodes 集合。
然后,我们需要记录一下状态:它是从没选中到选中了,还是从选中了到没选中?
var flagBoolean
// 从没有点击 到 点击 flagBoolean 1
// 从点击 到 没有点击 flagBoolean 2
// 都不是 flagBoolean 0 var zTree = $.fn.zTree.getZTreeObj("treeDemo"); var nodes = zTree.getChangeCheckedNodes(); for (var n in nodes) {
if (nodes[n].checked && !nodes[n].checkedOld) {
flagBoolean = 1
} else if (!nodes[n].checked && nodes[n].checkedOld) {
flagBoolean = 2
} else {
flagBoolean = 0
}
nodes[n].checkedOld = nodes[n].checked
}
最后,把别的DEMO里添加和销毁自定义DOM的 代码粘过来就行了。
if (flagBoolean === 1) {
if ($("#diyBtn_"+treeNode.id).length>0) return;
var editStr = "<input id='diyBtn_" +treeNode.id+ "' title='"+treeNode.name+"' />";
aObj.after(editStr);
var btn = $("#diyBtn_"+treeNode.id);
} else if (flagBoolean === 2) {
if (treeNode.parentTId && treeNode.getParentNode().id!=1) return;
$("#diyBtn_"+treeNode.id).unbind().remove();
$("#diyBtn_space_" +treeNode.id).unbind().remove();
}
以上。
ztree : checkbox 选中/不选中时动态添加/删除DOM元素的更多相关文章
- 用Javascript动态添加删除HTML元素实例 (转载)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- jquery给动态添加的dom元素绑定事件
$('input').click(function () { //处理代码 }); 这只能是对已经加载好的元素定义事件,那些后来添加插入的元素则需要另行绑定,对于页面中动态添加的元素,在页面加载完成后 ...
- Angularjs学习笔记2_添加删除DOM元素
1.调用element方法 angular.element(html) 把字符串或dom对象转化成一JQuery对象, angular.element(document.getElementB ...
- Jquery each() 如何操作动态添加的DOM元素
JQ each页面上的DOM元素的时候,如果有一部分的DOM是ajax异步加载的,那么each可能遍历不到元素,异步请求数据的同时不会影响后面的代码执行,今天就遇到这个问题了, 解决方案是讲ajax改 ...
- angular.js ng-repeat动态插入删除dom节点
既然上面提到 angular.js 下无需用户直接操作dom ,而是在编译间断 dom 与 控制层model 实现了双向绑定,一方做出改变,另一方就会立即改变,那问题来了,我想插入一个文本框和按钮,并 ...
- angular.js 动态插入删除dom节点
angular.js 是新一代web开发框架,它轻松在web前端实现了MVC模式,相比 jquery 模式,这种新玩意竟然不需要开发者直接去操作dom . 作为前端开发而不去操作dom ,这简直是一个 ...
- SpringBoot运行时动态添加数据源
此方案适用于解决springboot项目运行时动态添加数据源,非静态切换多数据源!!! 一.多数据源应用场景: 1.配置文件配置多数据源,如默认数据源:master,数据源1:salve1...,运行 ...
- javascript实现的动态添加表单元素input,button等(appendChild)
写一个小系统时,需要动态添加表单元素,按自己的实现方法写了这篇教程! 我想各位在很多网站上都看到过类似的效果! 1.先用document.createElement方法创建一个input元素! 代码如 ...
- 编辑 Ext 表格(一)——— 动态添加删除行列
一.动态增删行 在 ext 表格中,动态添加行主要和表格绑定的 store 有关, 通过对 store 数据集进行添加或删除,就能实现表格行的动态添加删除. (1) 动态添加表格的行 gridS ...
随机推荐
- 自由切换 网页上的 ico 图标
自由切换 网页上的 ico 图标: 第一步: 进入这个网站 :https://www.uupoop.com/ico/?action=make 第二步: 进入网站后,然后选择 ...
- HTTP协议简要
HTTP协议简要 HTTP协议是指超文本传输协议,简单来说就是一种规则,允许将HTML文档从Web服务器传送到Web浏览器. HTTP请求 HTTP请求包括三部分:请求行(请求方法),请求头(消息报头 ...
- Linux远程连接mongodb
当没有客户端工具,eg:robo3T时,如何修改mongodb里的数据呢? 1.连接mongodb服务器mongo 1.1.1.1:1688 2.查看数据库列表show dbs 3.选择使用log库u ...
- 黎活明8天快速掌握android视频教程--14_把文件存放在SDCard
把文件保存在手机的内部存储空间中 1 首先必须在清单文件中添加权限 <?xml version="1.0" encoding="utf-8"?> & ...
- Quartz.Net系列(九):Trigger之DailyTimeIntervalScheduleBuilder详解
1.介绍 中文意义就是每日时间间隔计划生成 2.API讲解 (1)WithInterval.WithIntervalInHours.WithIntervalInMinutes.WithInterval ...
- 查看Oracle当前用户下的(表视图,同义词...)
查看Oracle当前用户下的信息(用户,表视图,索引,表空间,同义词,存储过程函数,约束条件) 0.表空间 SQL>select username,default_tablespace from ...
- P1640 [SCOI2010]连续攻击游戏【并查集】
题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备 ...
- CentOS 的命令链接符“;”
";" 用于在一行中输入多个命令,执行顺序=输入顺序. For instance: $ ls -a;cd Music
- c语言学习笔记第二章———入门
B站有视频演示 2.1软件安装 推荐软件 1.dev-c++ 下载链接:(腾讯软件管家的下载地址) https://sm.myapp.com/original/Development/Dev-Cpp_ ...
- css获取除第一个之外的子元素
在前端页面开发中,需要使用css来选择除了第一个之外的子元素,例如希望每个span之间能间隔一定的距离,单不能给每个span设置margin-left,这样会导致第一个span的前面有间距,影响排版. ...