目录

文档操作方法得合理使用

文档操作方法得合理使用

https://i-blog.csdnimg.cn/direct/fb9c33fea1444b92b304719251389228.jpeg

博主介绍: ✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌

博主作品: 《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+MySQL+Vue等前后端分离项目,可以在左边的分类专栏找到更多项目。《Uniapp项目案例》有几个有uniapp教程,企业实战开发。《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。除此之外还有不少文章等你来细细品味,更多惊喜等着你哦

🍅 uniapp微信小程序 🍅面试题软考题免费使用,还可以使用微信支付,扫码加群。由于维护成本问题得不到解决,可能将停止线上维护。

🍅 文末获取联系 🍅精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟

Java项目案例《100套》

uniapp小程序《100套》

有需求代码永远写不完,而方法才是破解之道,抖音有实战视频课程,某马某千等培训都是2万左右,甚至广东有本科院校单单一年就得3万4年就12万学费,而且还没有包括吃饭的钱。所以很划算了。另外博客左侧有源码阅读专栏,对于求职有很大帮助,当然对于工作也是有指导意义等。在大城市求职,你面试来回一趟多多少少都在12块左右,而且一般不会一次性就通过,还得面试几家。而如果你对源码以及微服务等有深度认识,这无疑给你的面试添砖加瓦更上一层楼。

最后再送一句:最好是学会了,而不是学废了!!

最近在工作开发中遇到了一个小挑战,去掉组件里面的一些文字,研究了好久,原来是树形组件渲染需要一定的时间,需要使用延时才能看到效果。但是去掉后,把一些元素也去掉了,是因为方法用的不对,得使用内嵌的方法去掉。

树形展开/收缩效果消失的原因可能是你在修改 textContent 时,意外破坏了 DOM 结构或事件绑定。以下是一些可能的原因和解决方法:


1. 检查 DOM 结构

修改 textContent 时,可能会覆盖掉某些子元素(例如展开/收缩按钮的图标或事件绑定)。确保你只修改文本内容,而不是整个元素的 HTML。

错误示例:
element.textContent = element.textContent.replace('分组:', '');

如果 element 包含子元素(如按钮图标), textContent 会覆盖所有子元素。

正确示例:
const span = element.querySelector('span'); // 找到包含文本的子元素
if (span) {
  span.textContent = span.textContent.replace('分组:', '');
}

2. 保留展开/收缩按钮

树形组件的展开/收缩按钮通常是动态生成的,可能是一个 <span><i> 元素。确保在修改文本内容时,不要覆盖这些按钮。

示例:
document.querySelectorAll('.lee-grid .lee-grid-grouprow-cell').forEach(element => {
  const textNode = Array.from(element.childNodes).find(node => node.nodeType === Node.TEXT_NODE);
  if (textNode) {
    textNode.textContent = textNode.textContent.replace('分组:', '');
  }
});
解释:
  • element.childNodes :获取元素的所有子节点(包括文本节点和元素节点)。
  • node.nodeType === Node.TEXT_NODE :找到文本节点。
  • 只修改文本节点的内容,避免破坏其他子元素。

3. 使用 innerHTML 替代 textContent

如果文本内容和子元素混合在一起,可以使用 innerHTML 来精确替换文本内容。

示例:
document.querySelectorAll('.lee-grid .lee-grid-grouprow-cell').forEach(element => {
  element.innerHTML = element.innerHTML.replace('分组:', '');
});
注意:
  • innerHTML 会重新解析 HTML,可能会导致性能问题或事件绑定丢失。
  • 如果组件依赖于事件委托或动态绑定, innerHTML 可能会破坏这些功能。

4. 重新绑定事件

如果修改 textContentinnerHTML 导致事件丢失,可以尝试重新绑定事件。

示例:
function updateTreeText() {
  document.querySelectorAll('.lee-grid .lee-grid-grouprow-cell').forEach(element => {
    element.textContent = element.textContent.replace('分组:', '');
  });

  // 重新绑定展开/收缩事件
  bindTreeEvents();
}

function bindTreeEvents() {
  document.querySelectorAll('.lee-grid-group-togglebtn').forEach(button => {
    button.addEventListener('click', () => {
      console.log('展开/收缩按钮被点击');
      // 展开/收缩逻辑
    });
  });
}

setTimeout(updateTreeText, 3000);

5. 使用组件提供的方法

如果你使用的是某个 UI 组件库(如 Ant Design、Element UI 等),通常会有内置的方法来修改文本内容,而不破坏组件的功能。

示例:Ant Design Tree
const treeData = [
  {
    title: '分组:测试001',
    key: '1',
    children: [
      {
        title: '子节点 1',
        key: '1-1',
      },
    ],
  },
];

// 去掉“分组”字样
const newTreeData = treeData.map(node => {
  return {
    ...node,
    title: node.title.replace('分组:', ''),
  };
});

// 更新树形组件
treeRef.current.updateTreeData(newTreeData);

6. 调试工具检查

使用浏览器的开发者工具(F12)检查 DOM 结构,确认修改后的元素是否仍然包含展开/收缩按钮。

  • 打开开发者工具,切换到 Elements 面板。
  • 找到 .lee-grid-grouprow-cell 元素,检查其子元素是否完整。
  • 如果按钮丢失,说明修改方式有问题。

7. 延迟修改

如果组件在初始化时需要一些时间完成渲染,可以增加延迟时间。

示例:
setTimeout(() => {
  document.querySelectorAll('.lee-grid .lee-grid-grouprow-cell').forEach(element => {
    const textNode = Array.from(element.childNodes).find(node => node.nodeType === Node.TEXT_NODE);
    if (textNode) {
      textNode.textContent = textNode.textContent.replace('分组:', '');
    }
  });
}, 5000); // 延迟 5 秒执行

总结

  • 避免覆盖子元素 :确保只修改文本内容,而不是整个元素的 HTML。
  • 保留展开/收缩按钮 :检查 DOM 结构,确保按钮未被覆盖。
  • 重新绑定事件 :如果事件丢失,重新绑定展开/收缩事件。
  • 使用组件方法 :如果使用 UI 组件库,优先使用内置方法。
  • 调试工具检查 :使用开发者工具确认 DOM 结构是否完整。

通过以上方法,你应该能够解决树形展开/收缩效果消失的问题!

3