function showMenu(parentElement){
var uls= parentElement.getElementsByTagName("ul");
if (uls.length > 0)
uls[0].setAttribute("style","display: block");
}
function load(){
var lis = document.getElementsByTagName("li");
for (var i = 0; i < lis.length; i++) {
lis[i].addEventListener("click", function(){
showMenu(this);
});
}
}
据我所理解,最后的 'for' 循环,我看到这段代码打开了任何数组,或者像是有超过 1 个 ( [0] ) 项的任何 'li',因为在数组中 0 是 1,并循环查看它是否有子元素。如果有,它将打开 'this' 'li' 的 'ul'。
由于 load 函数包含 showMenu 函数,而我已经学会了一点,在函数内部使用函数,而不是复制自己,使用数组和变量,并以某种方式相互分配。Buckysroom 的教程至少帮助我理解了这么多。
现在... 我的问题是我不知道足够的 Javascript 来理解这个问题,我宁愿不使用 jQuery,而是学习如何使用纯 Javascript 实现这个目标。
任何指针都会很有帮助,我已经尝试了以下方法;
给我的三个 ul 添加唯一的 Id,这样我就知道可以用上面的代码打开它们,我也能用另一个代码将它们关闭,将其设置为 "display:none"。
那么问题在于我没有再次打开它们的机会,我明白我缺少一些部分,例如stopPropagation或者使用addEventListener-Click来完成第二部分。正如你所理解的,addEventListener是我从这里的代码中得到的。 function Meny1(){
var unorderedList = document.getElementById("ul_1");
var lis = unorderedList.getElementsByTagName("li");
for (var i = 0; i < lis.length; i++) {
lis[i].setAttribute("style","display: none");
}
}
我发现可以使用数字来指定每个菜单项,例如[23],而不是[i],以定位单个菜单项,请复制该行并进行如下修改:
lis[23].setAttribute("style","display: none");
lis[24].setAttribute("style","display: none");
但据我所知,这是一种不好的做法,因为如果我要添加另一个菜单项或删除一个菜单项,这样做将非常糟糕,而且也会产生大量的复制编码。
我的想法是,我想要像这样的东西:
html:<div id ="cssmenu"></div>
<ul id="ul_1"><li>I have many li's in each 'ul'</li></ul>
<ul id="ul_2"><li>I have many li's in each 'ul'</li></ul>
<ul id="ul_3"><li>I have many li's in each 'ul'</li></ul>
样式表:
#cssmenu{display:block;}
#cssmenu ul li ul{display:none}
我的想法是JS应该如何实现,我并没有使用类(因为w3c验证器指出我不应该这样做)。
function showAndCloseMenu1(){
var ul_1 = document.getElementbyId("ul_1");
if(mouseclicked on ul_2 || mouseclicked on ul_3){
close.ul_1(this)
}
if(mouseClicked ul_1){
style.display = "block";
}
}
然后对于ul_2和ul_3同样如此,我还没有足够的能力去考虑将所有内容实现到一个代码中,但当然我知道这是可能的,可以使用全局变量和属性来实现。
有人能帮助我吗?
我尝试过使用jQuery,但没有成功,而且正如我所说,我宁愿不使用它,因为我渴望充分学习Javascript!我可以阅读Javascript,而jQuery对我来说只是一堆美元符号,里面有简化的Javascript。
http://fiddle.jshell.net/ufcsccy3/
这里有一个fiddle,在浏览器中菜单无法正常工作,但如果您在那里看的话,就可以理解,它是左侧的菜单。
我该如何使用Javascript在我的导航中实现显示/隐藏功能? 我想得到正确的方向,我认为类别没有多大区别,但也许可以节省一些编码空间。
感谢任何对此的帮助!我似乎无法想出一个可行的解决方案! 我希望当我第一次单击ul_1时,它会打开。如果我再次单击它,我希望它关闭。 如果ul_1已打开,并且我单击ul_2或ul_3,我希望打开该标签并再次关闭ul_1,这是我认为比较标准的菜单导航。
#activeMenu添加到CSS中,一切都保持不变。 - Davidload方法中的做法更好,尽管你可能只想将它添加到直接子元素中。名称无关紧要,只要一切匹配即可。如果样式仍然被清除,请使用调试器工具查看哪些内容正在覆盖它们。#activeMenu应仅用于使其子ul可见。其他样式应来自它们原始位置。 - David