【问题标题】:Bootstrap treeview Select children on root click引导树视图在根单击时选择子项
【发布时间】:2015-03-03 10:54:13
【问题描述】:

我正在使用 Bootstrap Treeview (bootstrap-treeview.js v1.0.2); 如何在单击根时激活对根节点的所有子节点的选择效果?

这个 sn-p 没有按预期工作

$('#tree')
    .on('nodeSelected', function (event, node) {
        children=node['nodes'];
        for (var i = 0; i < children.length; i++) {
            children[i].states.expanded = true;
            children[i].states.selected = true;
        }
});

这仅适用于第一个孩子

$('#tree')
    .on('nodeSelected', function (event, node) {
        children=node['nodes'];
        for (var i = 0; i < children.length; i++) {
            nodeId=children[i]['nodeId'];
            console.log(nodeId);
            $('.node-tree[data-nodeid="'+nodeId+'"]').click();
        }
});

【问题讨论】:

  • 您忘记了 var 您的 childrennodeId 变量。这是一个错误。永远不要忘记使用var
  • 当然,这是一个错误,但是与点击事件相关的 'children[i].states.selected = true' 不会对子节点进行任何更改...似乎无法按预期工作。
  • 我对引导树视图了解不多。快速搜索一下:stackoverflow.com/a/21878141/18771 - 也许有帮助。

标签: jquery twitter-bootstrap treeview bootstrap-treeview


【解决方案1】:

参考下面我的代码,
请注意,您需要确保您的数据选项“multiSelect”为真。

var tree = $('#caseview').treeview({
    levels: 2,
    showTags: true,
    showCheckbox: true,
    multiSelect: true,
    data: caseData
});

caseview.on('nodeSelected', function(e, node){
    if (typeof node['nodes'] != "undefined") {
        var children = node['nodes'];
        for (var i=0; i<children.length; i++) {
            caseview.treeview('selectNode', [children[i].nodeId, { silent: true } ]);
        }
    }
});

【讨论】:

  • 如何选择children of childrenchildren of children of children等'?
【解决方案2】:

我从feiyuw改编了函数“_getChildren”:

function _getChildren(node) {
    if (node.nodes === undefined) return [];
    var childrenNodes = node.nodes;
    node.nodes.forEach(function(n) {
        childrenNodes = childrenNodes.concat(_getChildren(n));
    });
    return childrenNodes;
}

var tree = $('#tree').treeview({
    level: 3,
    expandIcon: "fa fa-plus-square",
    collapseIcon: "fa fa-minus-square",
    emptyIcon: "fa fa-truck",
    showTags: true,
    showCheckbox: true,
    selectable: false,
    highlightSelected: false,
    data: getTree()
}).on('nodeChecked', function (event, node){
    var childrenNodes = _getChildren(node);
    $(childrenNodes).each(function(){
        $(trucks).treeview('checkNode', [ this.nodeId, { silent: true } ]);;
    });
}).on('nodeUnchecked', function (event, node){
    var childrenNodes = _getChildren(node);
    $(childrenNodes).each(function(){
        $(trucks).treeview('uncheckNode', [ this.nodeId, { silent: true } ]);;
    });
});

【讨论】:

    【解决方案3】:

    我也遇到了这个问题,下面是我的解决方案(注意:我在这里使用lodash):

    function _getChildren(node) {
      if (node.nodes === undefined) return [];
      var childrenNodes = node.nodes;
      node.nodes.forEach(function(n) {
        childrenNodes = childrenNodes.concat(_getChildren(n));
      });
    
      return childrenNodes;
    }
    
    $('#tree').treeview({
      data: data,
      levels: 1,
      showCheckbox: true,
      showBorder: false,
      showTags: false,
      selectable: false,
      multiSelect: true,
      highlightSelected: false,
      onNodeChecked: function(event, node) {
        var parentNodes = _getParents([node], $(this));
        var childrenNodes = _.map(_getChildren(node), 'nodeId');
        var allNodes = parentNodes.concat(childrenNodes);
        $(this).treeview('checkNode', [allNodes, {silent: true}]);
      },
    });
    

    【讨论】:

    • “_getParents”函数在哪里?
    • 哦,抱歉,忘记粘贴了。
    【解决方案4】:

    只需要 select = true

    var tree = $('#caseview').treeview({
        selectable: true, // enable here, if exist, otherwise append it line
        data: caseData
    })
    .on('nodeSelected', function(e, node){
        if (node['text'].includes(".doc") { // text as name of node
            doit()
        }
    })
    

    ".doc" - 是选择文件而不是文件夹的文件扩展名示例

    doit() - 是你要继续的代码

    【讨论】:

      【解决方案5】:

      我尝试了以前的答案,但它有错误。我根据下面的代码修复了它

                      var treeCheck = $('.treeCheck').treeview({
                          data: res,
                          nodeIcon: "fa fa-desktop",
                          expandIcon: 'fa fa-angle-left',
                          collapseIcon: 'fa fa-angle-down',
                          checkedIcon: 'fa fa-check-circle',
                          uncheckedIcon: 'fa fa-circle-o',
                          showBorder: false,
                          showCheckbox: true
                      }).on('nodeChecked', function (event, node){
                          
                          var childrenNodes = _getChildren(node);
                          for (i = 0; i < childrenNodes.length; i++) {
                               $('.treeCheck').treeview('checkNode', [ childrenNodes[i], { silent: true } ]);
                          } 
                          
                      }).on('nodeUnchecked', function (event, node){
                          var childrenNodes = _getChildren(node);
      
                          for (i = 0; i < childrenNodes.length; i++) {
                              $('.treeCheck').treeview('uncheckNode', [ childrenNodes[i], { silent: false } ]);
                          }
                      });
      

      【讨论】:

      • function _getChildren(node) { if (node.nodes === undefined) return []; var childrenNodes = node.nodes; node.nodes.forEach(function(n) { childrenNodes = childrenNodes.concat(_getChildren(n)); });返回子节点; }
      猜你喜欢
      • 1970-01-01
      • 2020-08-07
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      相关资源
      最近更新 更多