在渲染element plus 中的el-tree 通过判断渲染数据的状态来进行特定颜色的变化

本文讲述了作者在处理el-tree组件时遇到的渲染问题,涉及后端接口数据的一维对象数组和动态HTMLCollection的处理,通过async/await、数组转换函数如flattenArray和arrayToHtmlCollection解决了数据获取和样式调整的问题。
摘要由CSDN通过智能技术生成

 在处理el-tree的这个渲染问题最重要的就是数据结构的类型,在这个小项目中,我所处理的后端数据是一个一维的对象数组,每一项数组的children中包含了一个数组。

在我通过dom来操作想要改变el-tree的css样式的同时,发现获取到的是空数组,数据没有如愿的获取到的情况有很多,在这里遇到的是渲染是基于后端数据接口调用完成后在调用a()函数,而解决的办法是通过async和await来进行处理的,在处理完成后继续来看我们获取到的数据,我们发现获取到的是一个htmlcollection,即一个动态类型的数组,那么我们在下面生成的htmlCollectionToArray函数就是来进行处理htmlcollection成为一个array数组,在数组的数据类型基础上,在进行操作处理。

处理成数组后会发现一个是一维数组,一个是二维数组(不太严谨但可以这么理解),通过flattenArray函数(代码块第三个函数)来将二维数组转换成一维数组,再通过遍历结合判断语句来进行赋值操作。

最后处理好之后,通过arrayToHtmlCollection来将array转成htmlcollection动态数组

//通过a来进行调用函数
const a= async () => {
  let tree = document.getElementsByClassName("想要修改的class");
 let array = htmlCollectionToArray(tree);
  let newnode = flattenArray(treedata.value.value);
  for (let i = 0; i < newnode.length; i++) {
    if (newnode[i].auditResult == false) {
      array[i][0].style.color = "black";
    }
    if (newnode[i].auditResult == true) {
      array[i][0].style.color = "green";
    }
  }
  tree = arrayToHtmlCollection(array);
};
//数组扁平化
function flattenArray(array) {
  let result = [];
  let beforeResult = ["1"];
  for (let i = 0; i < array.length; i++) {
    console.log(i, "i的值");
    console.log(typeof array[i] ==="undefined");
     result = result.concat(beforeResult);
    if (typeof array[i].children !=="undefined") {
      console.log("进来");
     
      result = result.concat(array[i].children);
    }
      console.log(result,"result");
  }
  return result;
}
// 将array转换成htmlcollection
function arrayToHtmlCollection(array) {
  let collection = document.createDocumentFragment();
  for (let i = 0; i < array.length; i++) {
    let element = document.createElement("div");
    element.innerHTML = array[i].join("");
    collection.appendChild(element);
 }
  return collection;
}//将htmlcollection转换成array
function htmlCollectionToArray(collection) {
  let result = [];
  for (let i = 0; i < collection.length; i++) {
    let elements = collection[i].getElementsByTagName("*") result.push(Array.from(elements));
  }
  return result;
}    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值