查看: 992|回复: 5

如何给eltree组件的子节点增加样式?

升级   0.1%

136

主题

241

回帖

10

积分

注册会员

Rank: 2

积分
10
发表于 2024-10-22 20:26:44 来自手机 | 显示全部楼层 |阅读模式
目前eltree组件是用脚本写入选项,但是我用

// 在组件加载完成后执行高亮操作
document.getElementById('eltree').addEventListener('load', function() {
    highlightNodeByName('选项节点的名称');
});

// 递归遍历树节点,并根据名称高亮
function highlightNodeByName(nodeName) {
    const rootNodes = document.querySelectorAll('.el-tree-node'); // 获取所有的根节点
    rootNodes.forEach(node => traverseAndHighlight(node, nodeName));
}

// 递归遍历每个节点,查找匹配的节点名称并高亮
function traverseAndHighlight(node, nodeName) {
    const label = node.querySelector('.el-tree-node__label'); // 查找当前节点的标签

    if (label && label.innerText.trim() === nodeName.trim()) {
        // 如果找到匹配的节点名称,则高亮该节点的内容部分
        const content = node.querySelector('.el-tree-node__content');
        if (content) content.style.backgroundColor = 'yellow';
    } else {
        // 否则,清除背景色
        const content = node.querySelector('.el-tree-node__content');
        if (content) content.style.backgroundColor = '';
    }

    // 查找并遍历该节点的子节点
    const childNodes = node.querySelectorAll(':scope > .el-tree-node__children > .el-tree-node');
    childNodes.forEach(childNode => traverseAndHighlight(childNode, nodeName));
}

rootNodes.forEach无法获取到除根节点之外的子节点,没法给子节点添加样式,请问要如何解决呢?子节点是查询值,所以无法用vue slots
回复

使用道具 举报

升级   100%

139

主题

1万

回帖

4万

积分

超级版主

Rank: 8Rank: 8

积分
41458
发表于 2024-10-23 13:26:44 | 显示全部楼层
首先您是怎么给树添加的节点,截图看看,另外,下面这段代码里不要使用document.querySelectorAll
使用this.form.get("eltree").node.querySelectorAll,再F12看看,子节点里是否有el-tree-node
// 递归遍历树节点,并根据名称高亮
function highlightNodeByName(nodeName) {
    const rootNodes = document.querySelectorAll('.el-tree-node'); // 获取所有的根节点
    rootNodes.forEach(node => traverseAndHighlight(node, nodeName));
}
回复

使用道具 举报

升级   0.1%

136

主题

241

回帖

10

积分

注册会员

Rank: 2

积分
10
发表于 2024-10-23 15:15:39 来自手机 | 显示全部楼层
本帖最后由 szhtest 于 2024-10-23 16:15 编辑
论坛管理员 发表于 2024-10-23 13:26
首先您是怎么给树添加的节点,截图看看,另外,下面这段代码里不要使用document.querySelectorAll
使用this ...

图片是我树组件的数据——脚本。

document.querySelectorAll和this.form.get("eltree").node.querySelectorAll我看打印出来的内容应该是一样的
this.form.get("eltree").node也只能获取到根节点,我this.form.get("eltree").node.innertext或者innerhtml打印出来的也只有根节点的数据。
eltree组件我是设置默认展开子节点的,而且我增加样式的代码是在组件的load或者postload事件写的,不知道为什么都拿不到子节点。在node-expand点击节点展开事件中就能拿到完整的innerhtml了,可是加载的时候并不会主动触发这个事件。

我的需求是要通过选中的节点名称去高亮节点,该怎么解决呢,并且需要在哪个事件写?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

升级   100%

139

主题

1万

回帖

4万

积分

超级版主

Rank: 8Rank: 8

积分
41458
发表于 2024-10-24 13:29:12 | 显示全部楼层
您这些脚本在哪里执行?
回复

使用道具 举报

升级   0.1%

136

主题

241

回帖

10

积分

注册会员

Rank: 2

积分
10
发表于 2024-10-25 10:21:25 来自手机 | 显示全部楼层
本帖最后由 szhtest 于 2024-10-25 11:04 编辑
论坛管理员 发表于 2024-10-24 13:29
您这些脚本在哪里执行?

树组件的load事件和postload都不行,可以看一下我上一条的详细回复。这段代码放在node-expand事件中是可以正常高亮的,但我需要在组件显示的时候就高亮节点,node-expand事件是不适用的。
回复

使用道具 举报

cxy

升级   4.92%

0

主题

83

回帖

492

积分

注册会员

Rank: 2

积分
492
发表于 2024-10-28 10:03:30 | 显示全部楼层
建议在表单的css中 使用 css选择器对节点记性样式控制。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系客服 关注微信 下载APP 返回顶部 返回列表
viewthread