我不是开发人员,这是我的第一篇帖子,他要求帮助指导我应该首先考虑哪些技术,所以请求温柔。至少我想了解这种方法是否符合目标。
在最终视图中,我希望从数据库中创建一个组织结构。每个员工至少有一名直接经理组成一棵树,并且他的卡上还附有其他数据。
我目前阶段面临的问题是,我不明白如何同时扩展level2 div(子部门)。不扩展下面的其他。
$(document).ready(function(){
$(".level1_div").click(function(){
$(".level2_div").slideUp();
$(".level3_div").slideUp();
$(".level4_div").slideUp();
$(this).next().show("slow");
});
$(".level2_div").click(function(){
$(".level4_div").slideUp();
$(this).next().slideToggle("slow");
});
$(".level3_div").click(function(){
$(this).next().slideToggle("slow")();
});
});

.wrapper {
background-color: lightblue;
padding: 5px;
margin: auto;
display: table;
font-size: 8px;
margin-top:50px;
border:1px solid #000000;
border-radius:6px;
}
.level1_div {
color: gainsboro;
margin-top:2px;
background-color:#666666;
width:300px;
padding:1px;
border:2px solid #000000;
border-radius:4px;
position:relative;
}
.level2_div {
color: gainsboro;
width:295px;
margin-left:5px;
margin-top:2px;
margin-bottom:2px;
border:2px solid #000000;
padding:1px;
display:none;
border-radius:4px;
background-color:#666666;
}
.level3_div {
color: gainsboro;
width:290px;
margin-left:10px;
margin-top:2px;
margin-bottom:2px;
border:2px solid #000000;
padding:1px;
display:none;
border-radius:4px;
background-color:#666666;
}
.level4_div {
color: gainsboro;
width:285px;
margin-left:15px;
margin-top:2px;
margin-bottom:2px;
border:2px solid #000000;
padding:1px;
display:none;
border-radius:4px;
background-color:#666666;
}
.postitle {
color: gainsboro;
width:55%;
display:inline-block;
margin:1px;
}
.department {
color: gainsboro;
display:inline-block;
width:55%;
margin:1px;
}
.fullname {
color: gainsboro;
width:113px;
display:inline-block;
margin:1px;
float:right;
}
.category {
color: gainsboro;
width:113px;
display:inline-block;
margin:1px;
float:right;
}
.search {
color: black;
background-color:silver;
width:100px;
margin:1px;
margin-left:10%;
position:relative;
border-radius:5px;
padding: 2px;
border:0.5px solid #000000;
display:inline-block;
}

<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<body>
<!-- Start your code here -->
<div class="wrapper">
<div class="search"> Search people... </div>
<div class="search"> Search skill... </div>
<div class="level1_div">
<div class="department"> Department </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="level2_div">
<div class="department"> Sub-Department </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="level2_div">
<div class="department"> Sub-Department </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="level3_div">
<div class="department"> Branch </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="level4_div">
<div class="department"> Sub-branch </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="level1_div">
<div class="department"> Department </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="level2_div">Level 2</div>
<div class="level3_div">Level 3</div>
<div class="level4_div">Level 4</div>
<div class="level1_div">
<div class="department"> Department </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="level2_div">Level 2</div>
<div class="level3_div">Level 3</div>
<div class="level4_div">Level 4</div>
<div class="level1_div">
<div class="department"> Department </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="level2_div">Level 2</div>
<div class="level3_div">Level 3</div>
<div class="level4_div">Level 4</div>
<div class="level1_div">
<div class="department"> Department </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="level2_div">Level 2</div>
<div class="level3_div">Level 3</div>
<div class="level4_div">Level 4</div>
</div>
<!-- End yo</p>code here -->
</body>
</html>
&#13;
答案 0 :(得分:0)
这适合你吗?
基本上我已经改变了一点树结构以便递归,在这个过程中减少了CSS和JS。我们现在拥有.level1
类
.level2
,.leveln
,.node
类。
.node {
width: 100% !important;
padding-top: 2px;
position: relative;
}
.node-content {
color: gainsboro;
background-color: #666666;
border: 2px solid #000000;
border-radius: 4px;
width: 100%;
padding: 1px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
position: relative;
}
.node-children {
padding: 0 0 0 2px;
}
<div class="node" collapsed="true">
<div class="node-content">
Content goes here
</div>
<div class="node-children">
Nested Nodes goes here
</div>
</div>
这是最终版本
$(document).ready(function() {
$('.node[collapsed] .node').slideUp();
/**
* Instead of using:
* > $('.node').click(function...)
*
* We can use:
* > $('.wrapper').on('click', '.node', function...)
*
* This will allow any .node element inside .wrapper to listen
* to the event (event if it wasn't in the DOM when this event
* was binded)
**/
$('.wrapper').on('click', '.node', function(event) {
var $self = $(this),
$children = $self.find('> .node-children > .node'),
$neighbours = $self.parent().children('.node').not($self),
$others = $self.parent().find('.node').not($self);
if ($self.attr('collapsed')) {
$self.removeAttr('collapsed');
$others.attr('collapsed', true).not($neighbours).slideUp();
$children.show("slow");
} else {
$self.attr('collapsed', true);
$children.slideUp();
}
return false;
});
});
// IGNORE THE CODE BELLOW!! (it's just binding a button to add new .node elements to the tree)
$(document).ready(function () {
$('<button>', {
type: 'button',
text: 'Add new .node',
id: '#addNodes'
})
.prependTo('body')
.click(function () {
$('<div class="node" collapsed="true">' +
'<div class="node-content">' +
'<div class="department"> Branch </div>' +
'<div class="fullname"> Full name</div>' +
'<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>' +
'<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>' +
'</div>' +
'<div class="node-children">' +
'<div class="node" collapsed="true">' +
'<div class="node-content">' +
'<div class="department"> Sub-branch </div>' +
'<div class="fullname"> Full name</div>' +
'<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>' +
'<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>' +
'</div>' +
'<div class="node-children">' +
'</div>' +
'</div>' +
'</div>' +
'</div>' +
'</div>').appendTo('.wrapper');
$('.node[collapsed] .node').hide();
});
});
.wrapper {
background-color: lightblue;
width: 300px;
padding: 5px;
margin: auto;
display: table;
font-size: 8px;
margin-top: 50px;
border: 1px solid #000000;
border-radius: 6px;
}
.node {
width: 100% !important;
padding-top: 2px;
position: relative;
}
.node-content {
color: gainsboro;
background-color: #666666;
border: 2px solid #000000;
border-radius: 4px;
width: 100%;
padding: 1px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
position: relative;
}
.node-children {
padding: 0 0 0 2px;
}
.postitle {
color: gainsboro;
width: 55%;
display: inline-block;
margin: 1px;
}
.department {
color: gainsboro;
display: inline-block;
width: 55%;
margin: 1px;
}
.fullname {
color: gainsboro;
width: 113px;
display: inline-block;
margin: 1px;
float: right;
}
.category {
color: gainsboro;
width: 113px;
display: inline-block;
margin: 1px;
float: right;
}
.search {
color: black;
background-color: silver;
width: 100px;
margin: 1px;
margin-left: 10%;
position: relative;
border-radius: 5px;
padding: 2px;
border: 0.5px solid #000000;
display: inline-block;
}
<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<body>
<!-- Start your code here -->
<div class="wrapper">
<div class="search"> Search people... </div>
<div class="search"> Search skill... </div>
<div class="node" collapsed="true">
<div class="node-content">
<div class="department"> Department </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="node-children">
<div class="node" collapsed="true">
<div class="node-content">
<div class="department"> Sub-Department </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
</div>
<div class="node" collapsed="true">
<div class="node-content">
<div class="department"> Sub-Department </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="node-children">
<div class="node" collapsed="true">
<div class="node-content">
<div class="department"> Branch </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="node-children">
<div class="node" collapsed="true">
<div class="node-content">
<div class="department"> Sub-branch </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="node-children">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="node" collapsed="true">
<div class="node-content">
<div class="department"> Department </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="node-children">
<div class="node" collapsed="true">
<div class="node-content">
<span>Level 2</span>
</div>
<div class="node-children">
<div class="node" collapsed="true">
<div class="node-content">
<span>Level 3</span>
</div>
<div class="node-children">
<div class="node" collapsed="true">
<div class="node-content">
<span>Level 4</span>
</div>
<div class="node-children">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="node" collapsed="true">
<div class="node-content">
<div class="department"> Department </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="node-children">
<div class="node" collapsed="true">
<div class="node-content">
<span>Level 2</span>
</div>
<div class="node-children">
<div class="node" collapsed="true">
<div class="node-content">
<span>Level 3</span>
</div>
<div class="node-children">
<div class="node" collapsed="true">
<div class="node-content">
<span>Level 4</span>
</div>
<div class="node-children">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="node" collapsed="true">
<div class="node-content">
<div class="department"> Department </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="node-children">
<div class="node" collapsed="true">
<div class="node-content">
<span>Level 2</span>
</div>
<div class="node-children">
<div class="node" collapsed="true">
<div class="node-content">
<span>Level 3</span>
</div>
<div class="node-children">
<div class="node" collapsed="true">
<div class="node-content">
<span>Level 4</span>
</div>
<div class="node-children">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="node" collapsed="true">
<div class="node-content">
<div class="department"> Department </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="node-children">
<div class="node" collapsed="true">
<div class="node-content">
<span>Level 2</span>
</div>
<div class="node-children">
<div class="node" collapsed="true">
<div class="node-content">
<span>Level 3</span>
</div>
<div class="node-children">
<div class="node" collapsed="true">
<div class="node-content">
<span>Level 4</span>
</div>
<div class="node-children">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
答案 1 :(得分:0)
这个保留了原始结构,并且在单击时不允许节点自我折叠。
$.fn.nextAfter = function (selector) {
var i,
len,
$next = $(),
$elements = this.nextAll();
for (i = 0, len = $elements.length; i < len; i++) {
if ($elements.eq(i).filter(selector).length > 0) {
$next = $next.add($elements.eq(i));
} else {
break;
}
}
return $next;
};
$(document).ready(function() {
$(".level1_div").click(function() {
if ($(this).attr('collapsed') === 'true') {
$(".level1_div").attr('collapsed', true);
$(".level2_div").attr('collapsed', true).slideUp();
$(".level3_div").attr('collapsed', true).slideUp();
$(".level4_div").slideUp();
$(this).nextAfter('.level2_div').show("slow");
$(this).attr('collapsed', false);
}
});
$(".level2_div").click(function() {
if ($(this).attr('collapsed') === 'true') {
$(".level2_div").attr('collapsed', true);
$(".level3_div").attr('collapsed', true).slideUp();
$(".level4_div").slideUp();
$(this).nextAfter('.level3_div').show("slow");
$(this).attr('collapsed', false);
}
});
$(".level3_div").click(function() {
if ($(this).attr('collapsed') === 'true') {
$(".level3_div").attr('collapsed', true);
$(".level4_div").slideUp();
$(this).nextAfter('.level4_div').show("slow");
$(this).attr('collapsed', false);
}
});
});
.wrapper {
background-color: lightblue;
padding: 5px;
margin: auto;
display: table;
font-size: 8px;
margin-top: 50px;
border: 1px solid #000000;
border-radius: 6px;
}
.level1_div {
color: gainsboro;
margin-top: 2px;
background-color: #666666;
width: 300px;
padding: 1px;
border: 2px solid #000000;
border-radius: 4px;
position: relative;
}
.level2_div {
color: gainsboro;
width: 295px;
margin-left: 5px;
margin-top: 2px;
margin-bottom: 2px;
border: 2px solid #000000;
padding: 1px;
display: none;
border-radius: 4px;
background-color: #666666;
}
.level3_div {
color: gainsboro;
width: 290px;
margin-left: 10px;
margin-top: 2px;
margin-bottom: 2px;
border: 2px solid #000000;
padding: 1px;
display: none;
border-radius: 4px;
background-color: #666666;
}
.level4_div {
color: gainsboro;
width: 285px;
margin-left: 15px;
margin-top: 2px;
margin-bottom: 2px;
border: 2px solid #000000;
padding: 1px;
display: none;
border-radius: 4px;
background-color: #666666;
}
.postitle {
color: gainsboro;
width: 55%;
display: inline-block;
margin: 1px;
}
.department {
color: gainsboro;
display: inline-block;
width: 55%;
margin: 1px;
}
.fullname {
color: gainsboro;
width: 113px;
display: inline-block;
margin: 1px;
float: right;
}
.category {
color: gainsboro;
width: 113px;
display: inline-block;
margin: 1px;
float: right;
}
.search {
color: black;
background-color: silver;
width: 100px;
margin: 1px;
margin-left: 10%;
position: relative;
border-radius: 5px;
padding: 2px;
border: 0.5px solid #000000;
display: inline-block;
}
<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<body>
<!-- Start your code here -->
<div class="wrapper">
<div class="search"> Search people... </div>
<div class="search"> Search skill... </div>
<div class="level1_div" collapsed="true">
<div class="department"> Department </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="level2_div" collapsed="true">
<div class="department"> Sub-Department </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="level2_div" collapsed="true">
<div class="department"> Sub-Department </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="level3_div" collapsed="true">
<div class="department"> Branch </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="level4_div" collapsed="true">
<div class="department"> Sub-branch </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="level1_div" collapsed="true">
<div class="department"> Department </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="level2_div" collapsed="true">Level 2</div>
<div class="level3_div" collapsed="true">Level 3</div>
<div class="level4_div" collapsed="true">Level 4</div>
<div class="level1_div" collapsed="true">
<div class="department"> Department </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="level2_div" collapsed="true">Level 2</div>
<div class="level3_div" collapsed="true">Level 3</div>
<div class="level4_div" collapsed="true">Level 4</div>
<div class="level1_div" collapsed="true">
<div class="department"> Department </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="level2_div" collapsed="true">Level 2</div>
<div class="level3_div" collapsed="true">Level 3</div>
<div class="level4_div" collapsed="true">Level 4</div>
<div class="level1_div" collapsed="true">
<div class="department"> Department </div>
<div class="fullname"> Full name</div>
<div class="postitle"> <span>Position</span> | <span>Subordinates ()</span> </div>
<div class="category"> <span>Location </span> | <span>Type </span> | <span> Mobile </span> </div>
</div>
<div class="level2_div" collapsed="true">Level 2</div>
<div class="level3_div" collapsed="true">Level 3</div>
<div class="level4_div" collapsed="true">Level 4</div>
</div>
<!-- End yo</p>code here -->
</body>
</html>