子菜单扩展和基于onclick的innerHTML替换,仅使用Javascript
首先,我应该提到的是,我对编码世界已经有4周的时间了,这是我第一次尝试创建一个简单的站点 我见过许多关于堆栈溢出的类似问题,但在尝试调整解决方案中提供的代码示例时,该解决方案将停止工作 因此,目前的障碍是:子菜单扩展和基于onclick的innerHTML替换,仅使用Javascript,javascript,menu,onclick,html-lists,innerhtml,Javascript,Menu,Onclick,Html Lists,Innerhtml,首先,我应该提到的是,我对编码世界已经有4周的时间了,这是我第一次尝试创建一个简单的站点 我见过许多关于堆栈溢出的类似问题,但在尝试调整解决方案中提供的代码示例时,该解决方案将停止工作 因此,目前的障碍是: 我有一个用HTML定义的菜单,其中一个元素(“公文包”)中有一个子菜单,该元素包含字符▼ (9660) 我为该元素设置了一个onclick事件,这样当它被单击时,它将做两件事:展开/显示它正下方的子菜单元素(将菜单中的其他元素推到更下方),并替换▼ 具有▲ 字符(▲)。。。直到再
- 我有一个用HTML定义的菜单,其中一个
元素(“公文包”)中有一个子菜单,该
元素包含字符▼ (9660)
- 我为该
元素设置了一个
事件,这样当它被单击时,它将做两件事:展开/显示它正下方的子菜单onclick
元素(将菜单中的其他
元素推到更下方),并替换▼ 具有▲ 字符(▲)。。。直到再次单击
元素以缩小/隐藏子菜单- 我不确定这是否重要,但是这个菜单在一个网格项目中,因为页面是使用CSS网格设置的
- 家
- 关于我们
- 投资组合▼李>
- 信息
- 接触
- 家
- 关于我们
- 投资组合▲
- 链接1
- 链接2
- 链接3
- 信息
- 接触
var arrowstring=document.getElementById(“arrowsdirection”).innerHTML;
document.getElementById(“IDforPortfolioLink”).classList.toggle(“show”);
if(IDforPortfolioLink.classList.contains('show')){
箭头字符串=“▲”
}否则{
箭头字符串=“▼”
}
arrowdirection.textContent=箭头字符串;
}
。子菜单内容{
显示:无;
位置:绝对位置;
}
.子菜单内容a{
显示:块;
}
.子菜单内容a:悬停{
背景颜色:绿色;
}
.表演{
显示:块;
}
-
嗯,你的代码有太多缺陷,我不得不重写。
我将尽我所能解释我在这里所做的一切:
nav
adisplay:flex;证明内容:中心;对齐项目:居中
将div集中在nav
内,并将其内联。我使用了nav div
,它几乎将文本放在它们的中心.portfolio
之外的所有类,因为拥有这么多类是没有用的div.expand-portfolio
成为div.portfolio
的子项,它本身(.expand portfolio)有另一个ul
子项,它持有链接。你可能已经注意到我添加了.portfolio
a位置:相对
和。展开投资组合
a位置:绝对代码>。我这样做是因为,我想从文档流中提取.expand portfolio
,这基本上意味着我想使.expand portfolio
不与页面上的任何元素交互。现在,当分配位置时:绝对
对于容器中的子对象,子对象的位置将是相对于文档的,而不是相对于父对象的。这就是为什么您可以添加position:relative代码>到父级
.expanded
的单独类,当分配给.expandportfolio
时,它的高度为150pxnav
aa500 ms ease
中设置了div
s,这样做是为了使属性之间的转换平滑,而不是突然。如果你不想要的话,你可以从他们身上移除该属性
现在是javascript
当我创建这3个变量时,您注意到我使用了document.getElementsByClassName
后跟一个[0]
。document.getElementsByClassName()
返回的是:节点列表。它基本上是一种“数组”,在附加了[0]之后,我只选择该类页面的第一个也是唯一一个元素
您可能已经注意到我在javascript文件中添加了onclick
函数。个人偏好。我说过,当我单击公文包按钮时,首先,您应该更改span的innerHTML
。(跨度元素包含实际符号)。我还说你应该切换.expanded
类。我做了一个if语句,检查.expand portfolio
是否不包含该类。如果没有,你几乎可以看到它的作用
我希望有帮助。如果您还有任何问题,请在评论中提问
var-portfolio=document.getElementsByClassName(“投资组合”)[0];
var portfolioInner=document.getElementsByClassName(“内部html”)[0];
var扩展