
正文
jquery实现多级菜单类型 jquery实现菜单栏管理
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
怎么实现级联菜单?
对于一个多条件的查询,我们希望在选择了一个菜单项后,另外一个下拉菜单能够根据我们所选择的第一个菜单项显示其所有子菜单项。这就是本文提到的级联菜单问题。级联菜单实现的方法有很多,本文根据笔者所做的一个小实验,简单的介绍一下如何通过XML来实现级联菜单的功能。
首先要定义一个XML文件,用以存放级联菜单的信息,我们命名为query.xml,其代码如下:
?xml version="1.0" encoding="gb2312"?
info
course
text软件工程/text
value1/value
/course
course
text数据结构/text
value2/value
/course
course
text操作系统/text
value3/value
/course
course
text计算机组成原理/text
value4/value
/course
teacher
text张老师/text
value1/value
/teacher
teacher
text李老师/text
value2/value
/teacher
teacher
text刘老师/text
value3/value
/teacher
teacher
text王老师/text
value4/value
/teacher
class
text一班/text
value1/value
/class
class
text二班/text
value2/value
/class
class
text三班/text
value3/value
/class
class
text四班/text
value4/value
/class
/info
然后再创建一个HTML文件,命名为query.html
在query.html里,首先创建一个表单
form id="queryForm"
select id="keyword" name="keyword" onChange="showDetail()"
option value="default"default/option
option value="1"课程/option
option value="2"教师/option
option value="3"班级/option
/select
select id="content" name="content" onChange="showValue()"
option value="default"default/option
/select
/form
从上面的代码可以看出,当我们选择第一级菜单时,会触发showDetail方法,这是通过JavaScript来实现的,因此我们还需要定义一个showDetail方法,其实现代码如下:
function showDetail(){
var document_xml = new ActiveXObject("Microsoft.XMLDOM");
document_xml.load("query.xml"); //加载info.xml
var RootNode = document_xml.documentElement; //获得info.xml文档的根节点
var keyword = document.getElementByIdx("keyword").value;
var details; //用以存放二级菜单内容,是一个数组对象
var content = document.getElementByIdx("content");
content.options.length = 0;//先清空
if(keyword=="default"){
var option = new Option("default","default");
content.add(option);
}else{
if(keyword=="1"){
details = document_xml.getElementsByTagName_r("course");
}else if(keyword=="2"){
details = document_xml.getElementsByTagName_r("teacher");
}else if(keyword=="3"){
details = document_xml.getElementsByTagName_r("class");
}
for(var i=0;idetails.length;i++){
var xText = details[i].childNodes[0].firstChild.nodeValue; //获取文本
var xValue = details[i].childNodes[1].firstChild.nodeValue; //获取文本以应的值
var option = new Option(xText,xValue);
content.add(option);
}
}
}
从上面的代码可以看出,showDetail方法会根据一级菜单选项的不同显示对应的子菜单。这里涉及到通过JavaScript来读取xml文件的操作,可以参见源码的注释部分,记得结合xml文件里的内容一起看哦。
二级菜单显示出来之后,我们就可以进行选择了,选择之后,会调用showValue方法,把选到的子菜单项的value和text显示出来。showValue的定义如下:
function showValue(){
var content= document.getElementByIdx("content");
var contentText = content.options[content.selectedIndex].text; //获取text值
var contentValue = document.getElementByIdx("content").value; //获取文本
alert(contentValue+" "+contentText);
}
在这个方法里,要注意option当中text值的获取,它与select表单域的value的获取方式不大一样,详见代码及其注释。
把两个方法封装在head/head之间,记得要写上script language="javascript"和/script了,然后你直接打开query.xml就可以看到效果了。
不知是否对楼主有用,希望对楼主有所帮助。
相关问答
Q1: 如何构造jquery 多级选择器
jQuery 层次选择器
$("div span") 选取div里的所有span元素
$("div span") 选取div元素下元素名是span的子元素
$("#one +div") 选取id为one的元素的下一个div同辈元素 等同于$(#one).next("div")
$("#one~div") 选取id为one的元素的元素后面的所有div同辈元素 等同于$(#one).nextAll("div")
$(#one).siblings("div") 获取id为one的元素的所有div同辈元素(不管前后)
$(#one).prev("div") 获取id为one的元素的前面紧邻的同辈div元素
所以 获取元素范围大小顺序依次为:
$(#one).siblings("div")$("#one~div")$("#one +div") 或是
$(#one).siblings("div")$(#one).nextAll("div")$(#one).next("div")
不积跬步,无以至千里!
Q2: JQuery实现多级tab切换
!DOCTYPE html
html lang="en"
head
meta charset="UTF-8"
titleDocument/title
script src="jquery-3.3.1.js"/script
style
.Tab{
}
.Tab span{
margin-right:10px;
cursor:pointer;
}
/style
/head
body
div class="Tab"
spanA1/span
spanB2/span
spanC3/span
/div
div style="display: none" class="tab1"
div
AA1
div style="display: none;margin-left: 100px;"
pAAA1/p
pAAA1/p
pAAA1/p
/div
/div
div
AA2
div style="display: none;margin-left: 100px;"
pAAA2/p
pAAA2/p
pAAA2/p
/div
/div
div
AA3
div style="display: none;margin-left: 100px;"
pAAA3/p
pAAA3/p
pAAA3/p
/div
/div
/div
div style="display: none" class="tab1"
div
BB1
div style="display: none;margin-left: 100px;"
pBBB1/p
pBBB1/p
pBBB1/p
/div
/div
div
BB2
div style="display: none;margin-left: 100px;"
pBBB2/p
pBBB2/p
pBBB2/p
/div
/div
div
BB3
div style="display: none;margin-left: 100px;"
pBBB3/p
pBBB3/p
pBBB3/p
/div
/div
/div
div style="display: none" class="tab1"
div
CC1
div style="display: none;margin-left: 100px;"
pCCC1/p
pCCC1/p
pCCC1/p
/div
/div
div
CC2
div style="display: none;margin-left: 100px;"
pCCC2/p
pCCC2/p
pCCC2/p
/div
/div
div
CC3
div style="display: none;margin-left: 100px;"
pCCC3/p
pCCC3/p
pCCC3/p
/div
/div
/div
/body
script
$(function(){
$(".Tab span").each(function(i){
$(this).click(function(){
$(".tab1:eq("+i+")").show().siblings(".tab1").hide()
})
})
$(".tab1div").click(function(){
$(this).find("div").show()
$(this).siblings("div").find("div").hide()
})
})
/script
/html
Q3: 简单易懂的jQuery导航(三级菜单)源码
!-- 三级操蛋导航 --
div class="nav_left"
div class="nav_leftlist"
h2b/b用户系统/h2
dl
dtb/b用户管理/dt
dd
a class="cur" href=""商户信息b/b/a
a href=""用户信息b/b/a
/dd
/dl
/div
div class="nav_leftlist"
h2b/b财务系统/h2
dl
dtb/b系统账务/dt
dd
a href=""平台账单b/b/a
a href=""账单明细b/b/a
/dd
/dl
dl
dtb/b商户账务/dt
dd
a href=""商户账单b/b/a
a href=""提现管理b/b/a
/dd
/dl
dl
dtb/b用户账务/dt
dd
a href=""用户账单b/b/a
a href=""提现管理b/b/a
/dd
/dl
/div
/div
style
.nav_left{background: #232b35;height: 100%;width: 220px;min-height: 600px;position: fixed;top: 100px;left: 0;}
.nav_leftlist{}
.nav_leftlist h2{height: 50px;line-height: 50px;padding-left: 40px;font-size: 16px;background: #3b444f;color: #999999;position: relative;cursor: pointer;}
.nav_leftlist h2 b{position: absolute;top: 20px;left: 13px;width: 16px;height: 9px;background: url(../images/icon04.png) no-repeat;background-position: 0 0;cursor: pointer;}
.nav_leftlist h2 b.cur{background-position: -16px 0;}
.nav_leftlist dl{}
.nav_leftlist dl dt{height: 50px;line-height: 50px;background: #2c3643;font-size: 16px;color: #ffffff;padding-left: 60px;position: relative;cursor: pointer;}
.nav_leftlist dl dt b{position: absolute;top: 20px;left: 34px;width: 16px;height: 9px;background: url(../images/icon04.png) no-repeat;background-position: 0 -10px;}
.nav_leftlist dl dt b.cur{background-position: -16px -10px;}
.nav_leftlist dl dd{}
.nav_leftlist dl dd a{display: block;height: 50px;line-height: 50px;color: #fff;padding-left: 80px;font-size: 16px;position: relative;}
.nav_leftlist dl dd a.cur{color: #ee581c;}
.nav_leftlist dl dd a.cur b{display: block;position: absolute;top: 16px;right: -1px;width: 11px;height: 18px;background: url(../images/icon04.png) no-repeat;background-position: 0 -20px;}
/style
/body
script type="text/javascript" src="../js/jquery.js" /script
script type="text/javascript"
$(function(){
$('.nav_leftlist').on('click', 'h2', function(event) {
$(this).siblings('dl').toggle();
if($(this).siblings('dl').css('display')=='none'){
$(this).find('b').addClass('cur');
}else{
$(this).find('b').removeClass('cur');
}
});
$('.nav_leftlist').on('click', 'dl dt', function(event) {
$(this).siblings('dd').toggle();
if($(this).siblings('dd').css('display')=='none'){
$(this).find('b').addClass('cur');
}else{
$(this).find('b').removeClass('cur');
}
});
})
/script
效果图:
Q4: CSS里关于position. 下面是个多级菜单,用jQuery写的,有问题,求帮助:
你在CSS中定义了一个.hover的类,可是你HTML里面,都没有一个元素是这个类的。
一般父容器的position:relative,其本身的position:absolute,这样可以实现,这个元素相对于父容器定位,比如
div id="parent" style="position:relative; height:100px; width:100px;"
div id="child" style="position:absolute; height:50px; width:50px; top:100px; left:0;"/div
/div
child层样式里面的top:100px; left:0; 就是用于具体定位的,默认为top:0; left:0; 也就是child的上边缘,左边缘分别于parent的上边缘,左边缘重合,现在设置为top:100px; left:0; 这个就是child的上边缘与parent上边缘,在Y轴方向向下偏移100px; 为负值就是向上偏移;而左边缘偏移量为0,也就是依然重合的。
对CSS,我还懂点,有兴趣的加QQ互相交流吧550485124
Q5: 用jquery的ajax实现二级下拉菜单级联操作,一级的select id=industrial 二级的select id=profession
因为没有足够的信息,我说几个要点,你看看后台是不是这样的:
1.你使用的是 $.getJSON ,这个方法要求你的后台数据 Content-Type 是 text/json 或者 application/json 。如果不是这样的话,肯定不行的
2.回调函数中,myJSON 到底是什么类型,从你的代码来看,它是一个数组,这个数组中的每一个元素都是一个对象,该对象至少有两个属性:professionid 和 professionName .
确认你的数据信息吧,js代码没有什么问题,对了,你是手动触发第一个 select 的 change 事件的,看看你的第一个 select 是不是在触发之前已经有数据了,不然,第一次的触发是没有效果的
关于jquery实现多级菜单类型和jquery实现菜单栏管理的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







