【发布时间】:2016-10-17 11:40:26
【问题描述】:
考虑使用 JQuery - treetable 插件添加功能。
最初一个节点(例如,a)应该处于折叠状态,然后我只想执行一个操作,当我点击节点时 a,树应该展开直到它的子节点有兄弟节点,并且该子节点和它的兄弟节点都应该处于折叠状态。
一个例子:
a 有一个孩子 b (a-b)
b 有一个孩子 b1, (a-b-b1)
b1 有一个孩子 b2,(a-b-b1-b2)
b2 有两个孩子 b3 和 b4 (a-b-b1-b2-b3&b4),
b3 有一个孩子 b5 (a-b-b1-b2-b3-b5)
b4 有一个孩子 b6 (a-b-b1-b2-b4-b6)
b6 有两个孩子(a-b-b1-b2-b4-b7&b8)
b7 有一个孩子 b9 (a-b-b1-b2-b4-b7-b9)
b8 有一个孩子 b10 (a-b-b1-b2-b4-b7-b10)
对应的树形结构如下: Tree
颜色表明,当我点击“a”时,它应该会自动扩展至“b3”和“b4”。同样,如果我单击“b4”,它应该会扩展到“b7”和“b8”。
HTML sn-p
<div class="container">
<h1>Toggling</h1>
<table class="table table-hover table-striped table-bordered">
<tr class="level_0" id="a"><td>a</td></tr>
<tr class="level_1 parent_a" id="b"><td>b</td></tr>
<tr class="level_2 parent_b" id="b1"><td>b1</td></tr>
<tr class="level_3 parent_b1" id="b2"><td>b2</td></tr>
<tr class="level_4 parent_b2" id="b3"><td>b3</td></tr>
<tr class="level_4 parent_b2" id="b4"><td>b4</td></tr>
<tr class="level_5 parent_b3" id="b5"><td>b5</td></tr>
<tr class="level_5 parent_b4" id="b6"><td>b6</td></tr>
<tr class="level_6 parent_b6" id="b7"><td>b7</td></tr>
<tr class="level_6 parent_b6" id="b8"><td>b8</td></tr>
<tr class="level_7 parent_b7" id="b9"><td>b9</td></tr>
<tr class="level_7 parent_b8" id="b10"><td>b10</td></tr>
</table>
</div>
jQuery sn-p
if (typeof jQuery === 'undefined') throw "jQuery Required";
jQuery(function ($) {
var treeTable = {
parentClassPrefix : '',
collapsedClass : 'expanded',
init : function(parentClassPrefix) {
this.parentClassPrefix = parentClassPrefix;
$('table').on('click', 'tr', function () {
treeTable.toggleRowChildren($(this));
});
},
toggleRowChildren : function(parentRow) {
var childClass = this.parentClassPrefix+parentRow.attr('id');
var childrenRows = $('tr', parentRow.parent()).filter('.'+childClass);
childrenRows.toggle();
childrenRows.each(function(){
if (!$(this).hasClass(treeTable.collapsedClass)) {
treeTable.toggleRowChildren($(this));
}
});
parentRow.toggleClass(this.collapsedClass);
}
};
treeTable.init('parent_');
});
执行可以在JSFiddleLink中看到。 注意:可以通过点击节点a来监控更改。
现在,我想知道我应该在 jQuery 中进行哪些更改以实现扩展直到 sibling node 所需的输出,如前所述。
【问题讨论】:
-
是否可以使 DOM 与层次结构相对应,然后使用 jQuery 很容易,创建一个函数 getEndPointOf Expansion(container){ 迭代容器中的每个节点并找到第一个有子节点的节点返回它},然后为此调用扩展函数
-
如果不是,另一种选择是创建一个包含层次结构设计的对象并使用相同的 'getEndPointOf Expansion()'
-
@nivendha:您能否为我讨论的案例提供一个示例代码块?那会很有帮助。
标签: javascript jquery html treetable