treeview 展开选中节点,收缩同级节点(可以改变展开和收缩的图标)

项目需求是实现一个TreeView控件,每次点击节点时,只展开所选节点并收缩其同级节点。通过重写`TreeView_ToggleNode`函数,可以达到此效果。在重写后的函数中调用了`CollapseBrothers`方法来折叠同级节点,并在`TreeView_ToggleNode`中处理展开和收缩的图标变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


项目中的要求:在treev只能打开一个节点,同级节点要收缩。

通过重写TreeView_ToggleNode,可以实现要求。代码如下:

<script type="text/javascript">
    var base_TreeView_ToggleNode = TreeView_ToggleNode;
    TreeView_ToggleNode = function (data, index, node, lineType, children) {
        CollapseBrothers(data, node, lineType, children);
        base_TreeView_ToggleNode(data, index, node, lineType, children);
    }
    function CollapseBrothers(data, node, lineType, childContainer) {
        var parent = childContainer.parentNode;
        for (i = 0; i < parent.childNodes.length; i++) {
            if (parent.childNodes[i].nodeName.toLowerCase() == "div") {
                if (parent.childNodes[i].id != childContainer.id) {
                    parent.childNodes[i].style.display = "none";
                }
            } //end if div
            else if (parent.childNodes[i].nodeName.toLowerCase() == "table") {
                var treeLinks = parent.childNodes[i].getElementsByTagName("a");
                if (treeLinks.length > 2 || treeLinks.length == 2) {
                    var j = 0;
                    if (treeLinks[j].firstChild.nodeName) {
                        if (treeLinks[j].firstChild.nodeName.toLowerCase() == "img") {
                            var img = treeLinks[j].firstChild;
                            //id相等,则不需处理
                            if (img.parentNode.id == node.id) {
                            }
                            else if (img.parentNode.id != node.id) {
                                //   var imgLineType
                                var divHide = document.getElementById(img.parentNode.id); //获取当前点击的IMG的<td>
                                  // divHide.style.display = "none";
                                if ((typeof (img) != "undefined") && (img != null)) {
                                    if (lineType == "l") {
                                        img.src = data.images[14];
                                    }
                                    else if (lineType == "t") {
                                        img.src = data.images[11];
                                    }
                                    else if (lineType == "-") {
                                        img.src = data.images[17];
                                    }
                                    else {
                                        img.src = data.images[4];
                                    }
                                    img.alt = data.expandToolTip.replace(/\{0\}/, TreeView_GetNodeText(node));
                                }
                            } //end if (img.parentNode.id != node.id)
                        } //end if(treeLinks[j].firstChild.nodeName.toLowerCase() == "img")
                    } //end  if (treeLinks[j].firstChild.nodeName)
                } //end   if (treeLinks.length >2 || treeLinks.length==2)
            } // end   if (parent.childNodes[i].nodeName.toLowerCase() == "table")
        } // end for
    } //end function

</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值