How to use ul li's nesting to achieve multi-level menu effect? _html/css_WEB-ITnose

WBOY
Release: 2016-06-24 11:46:21
Original
1856 people have browsed it

我想要用ul+li实现多级动态菜单,可以灵活添加元素和删除元素。
预期的效果如下:(图中的线是我画的,帮助理解各元素关系的,实际页面中不需要。)


但是现实的效果惨不忍睹,添加元素功能实现了,但是排版是乱的,完全看不出来逻辑关系
截图如下:


代码如下:











  • 工程名称:


  • 项目名称:
    • 子项名称:


















function reduce(obj)
{
alert("reduce")
}

function add(obj){
var a=obj.parentNode.id.split("_");
var targetobj=obj.parentNode.previousSibling;
while (targetobj.nodeType!=1)
{
targetobj=targetobj.previousSibling;
}
var parentinput=targetobj.firstChild
while (parentinput.nodeType!=1)
{
parentinput=parentinput.nextSibling;
}
var lastelement=targetobj.lastChild
while (lastelement.nodeType!=1)
{
lastelement=lastelement.previousSibling;
}
var b=lastelement.id.split("_");
if (b[0]="designul"){temp=parseInt(b[2]) 1}else{temp=1}
var c=obj.parentNode.parentNode.id.split("_");
var temp;
var createul=document.createElement("ul");
createul.id=c[0] "_" (parseInt(c[1]) 1) "_" temp;
createul.name=targetobj.id;
targetobj.appendChild(createul);
lastelement=lastelement.nextSibling ;
while (lastelement.nodeType!=1)
{
lastelement=lastelement.nextSibling;
}
var createli;
var d=lastelement.id.split("_");
temp=(parseInt(d[2])-1)*2;
for (var i=1;i<3;i )
{
createli=document.createElement("li");
createli.id="li_" d[1] "_" (parseInt(temp) i)
createli.name=lastelement.id;
lastelement.appendChild(createli);
switch (i)
{
case i=1:
var createinput=document.createElement("input");
createinput.id="input_" createul.id.split("_")[1] "_" createul.id.split("_")[2];
createinput.name =parentinput.id;
createinput.type ="text" ;
createinput.value=createinput.id " " createinput.name;
createli.innerHTML="子项名称:";
createli.appendChild(createinput);
break;
case i=2:
var createbutton=document.createElement("input");
createbutton.id="add_" createul.id.split("_")[1] "_" createli.id.split("_")[2];
createbutton.name=createli.id;
createbutton.type="button";
createbutton.value="添加下级节点";
createbutton.onclick=function(){add(this);};
createli.appendChild(createbutton);
createbutton=document.createElement("input");
createbutton.id="reduce_" createul.id.split("_")[1] "_" createli.id.split("_")[2];
createbutton.name=createli.id
createbutton.type="button"
createbutton.value="删除下级节点"
createbutton.onclick=function(){reduce(this);};
createli.appendChild(createbutton);
break;
}
}
}


谁能告诉我如何实现?谢谢了。


回复讨论(解决方案)

<!doctype html><html lang="en"><head>	<meta charset="UTF-8">	<title>页面名称</title><style type="text/css">ul {padding: 0;margin: 0;height: auto;position: relative;display: block;border:2px solid;border-radius:10px;-moz-border-radius:10px; /* Old Firefox */}li {display: block;padding: 10px;padding-left: 20px;margin: 0;border: 0px;height: auto;min-height: 25px;position: relative;width: auto;vertical-align: middle;white-space:nowrap;display:compact}</style><script type="text/javascript" src="http://code.jquery.com/jquery-1.11.2.min.js"></script></head><body><ul class="head">	<li><input type="text" /><input type="button" value="添加子节点" class="add" /></li></ul><script type="text/javascript">$(".head").on("click", ".add", function(event){	var ul = $(this).parent().children("ul");	if (ul.length==0)		ul = $("<ul>").appendTo($(this).parent());	ul.append('<li><input type="text" /><input type="button" value="删除" class="del" /><input type="button" value="添加子节点" class="add" /></li>');}).on("click", ".del", function(event){	$(this).parent().remove();});</script></body></html>
Copy after login

[/code]


非常感谢,你的代码很简单呀,原来都不知道还可以这么写,不过我的代码中每一个新加入的input的id和name都是用来体现结构关系的,比如说,所有input的name都是上一级input的id,这样通过name就能找到下级的所有input,id也是,都是按“类型_层级_序号”这种关系命名的。
你的代码实现的效果跟我现在的差不多,多加入几个层级后,画面会看着很乱,逻辑关系就不清楚了,我想实现下图的效果,不知道有没有什么办法,如果你知道能说一下吗?我好像每个帖子只能回复3次,所以连话也不敢多说。
如图:

<!doctype html><html lang="en"><head>	<meta charset="UTF-8">	<title>页面名称</title><style type="text/css">ul {padding: 0;margin: 0;height: auto;position: relative;display: block;border:2px solid;border-radius:10px;-moz-border-radius:10px; /* Old Firefox */float: left;}li {display: block;padding: 10px;padding-left: 20px;margin: 0;border: 0px;height: auto;min-height: 25px;position: relative;width: auto;vertical-align: middle;white-space:nowrap;clear: left;}li input {	float: left;	width: 60px;}li .add {	width: 56px;}li .del {	width: 40px;}</style><script type="text/javascript" src="http://code.jquery.com/jquery-1.11.2.min.js"></script></head><body><ul class="head">	<li><input type="text" name="a" value="a" class="txt" /><input type="button" value="添加子" class="add" data-n="0" /></li></ul><script type="text/javascript">$(".head").on("click", ".add", function(event){	var ul = $(this).parent().children("ul");	if (ul.length==0)		ul = $("<ul>").appendTo($(this).parent());	var nn = parseInt($(this).data("n"), 10)+1;	$(this).data("n",nn);	var n = $(this).parent().children(".txt").attr("name")+"_"+nn;	ul.append('<li><input type="text" name="'+n+'" value="'+n+'" class="txt" /><input type="button" value="删除" class="del" /><input type="button" value="添加子" class="add" data-n="0" /></li>');}).on("click", ".del", function(event){	if ($(this).parent().parent().children("li").length<=1)		$(this).parent().parent().remove();	else		$(this).parent().remove();});</script></body></html>
Copy after login

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template