上一篇,关于ztree节点数据过长的文章,不能动态控制,根据情况,自己又改进了下。
这一次的改进,包括:
一:根据ztree所在的区域长度以及节点的级数 动态 判断节点是否省略,不再写死。
二:新增了关于 节点数据 中,包含汉字和英文字母的判断,更加精确。
function addDiyDom(treeId, treeNode) {
var ztreeWidth=$("#tree").css("width");
ztreeWidth=parseInt(ztreeWidth);
//默认ztree字体大小为12px,可以显示字节数(10代表ztree的padding,18代表图标宽度,每一级节点缩进16px)
var num=parseInt((ztreeWidth-10-18*(treeNode.level+1)-16)/12*2);
//判断 节点 字节数
var spantxt=$("#" + treeNode.tId + "_span").html();
if(spantxt){
var txtLength=GetLength(spantxt);
}
//如果 节点数据长度大于允许长度,即将超出时
var cutNum,cutLength=0;
if(txtLength>num){
for (var i = 0; i < spantxt.length; i++){
var charCode = spantxt.charCodeAt(i);
if (charCode >= 0 && charCode <= 128){
cutLength += 1;
}else{
cutLength += 2;
}
if(cutLength>=num-2){
cutNum=i;//找到刚符合 允许长度 的字符串的位置
break;
}
}
spantxt=spantxt.substring(0,cutNum)+"...";
$("#" + treeNode.tId + "_span").html(spantxt);
}
//判断 包含汉字和英文的字符串的长度判断方法,判断字节数
function GetLength(str){
var realLength = 0;
for (var i = 0; i < str.length; i++){
var charCode = str.charCodeAt(i);
if (charCode >= 0 && charCode <= 128)
realLength += 1;
else
realLength += 2;
}
return realLength;
}
}