如何制作带有子链接的可点击列表
How can I make clickable list with sublinks ?
我正在尝试制作一个可点击的菜单,并尝试使用 JavaScript 和 CSS 使其切换,但我想让每个也都有子菜单也切换,我尝试主要使用 javascript 来做到这一点,我该怎么做?
这是我的代码:
.HTML:
<div class="dropdown">
<button onclick="myFunction()" class="dropbtn">|||</button>
<div id="myDropdown" class="dropdown-content">
<a href="#">Link 1</a>
<a href="#">Link 2</a>
<div class="child-dropdown">
<a href="#">Sublink 1</a>
<a href="#">Sublink 1</a>
<a href="#">Sublink 1</a>
</div>
<a href="#">Link 3</a>
<div class="child-dropdown">
<a href="#">Sublink 1</a>
<a href="#">Sublink 1</a>
<a href="#">Sublink 1</a>
</div>
</div>
</div>
Javascript:
<script>
function myFunction() {
document.getElementById("myDropdown").classList.toggle("show");
}
window.onclick = function(event) {
if (!event.target.matches('.dropbtn')) {
var dropdowns = document.getElementsByClassName("dropdown-content");
var i;
for (i = 0; i < dropdowns.length; i++) {
var openDropdown = dropdowns[i];
if (openDropdown.classList.contains('show')) {
openDropdown.classList.remove('show');
}
}
}
}
</script>
.css
.dropbtn {
background-color: #cc0000;
color: white;
padding: 16px;
font-size: 16px;
border: none;
cursor: pointer;
position:relative;
}
.dropbtn:hover, .dropbtn:focus {
background-color: #e6e6e6;
}
.dropdown {
position: relative;
display: inline-block;
}
.dropdown-content {
display: none;
position: absolute;
background-color: #e6e6e6;
min-width: 160px;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
}
.dropdown-content a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
}
.dropdown-content a:hover {background-color: #cc0000}
.show {display:block;}
使用给定的标记,JavaScript 甚至不需要 #myDropdown
中的链接:你可以像这样使用:focus
伪类
#myDropdown a:focus + div {
display: block;
}
当然,只要你的链接是专注的,这就可以了:如果你想能够有其他的东西聚焦(或打开许多子菜单),你可以使用一些javascript,比如
[].forEach.call(document.querySelectorAll('#myDropdown > a'), function(l) {
l.addEventListener('click', function() {
l.classList.toggle('open');
}, false);
});
或在#myDropdown
上进行活动委派
document.getElementById('myDropdown').addEventListener('click', function(evt) {
var target = evt.target;
if (target.nodeName.toLowerCase() === 'a') {
target.classList.toggle('open');
}
}, false);
和这个 CSS
#myDropdown div { display: none; }
#myDropdown a.open + div { display: block; }
代码笔演示
相关文章:
- 如何在ReactJs中链接下拉列表和文本区域
- 如何使此链接列表受cookie支持
- 当链接单击-jQuery时,第二层下拉列表将隐藏
- 当按下链接以在不同页面上的表单中的下拉列表中设置值时
- 如何创建加号[+]减号[-]切换,以扩展链接列表,并与Opera Mini兼容
- 如何在我的javascript生成列表中的
- 部分中放置更多超链接
- JQuery在链接的静态页面中搜索,突出显示找到的单词,而不破坏列表
- 将URL的文本列表转换为可点击的HTML链接
- 如何使用AngularJS链接下拉列表
- 我想在单击clear链接时使用javascript中的拼接删除整个列表
- 当我从目的地链接返回时,如何在列表组中保持该位置
- 在列表中创建链接
- javascript下拉列表-无法添加链接
- 如何通过在Javascript中单击链接,用链接的值设置下拉列表值
- 使用 JavaScript 从链接列表中获取链接名称
- 如何通过单击链接为具有 URL 值的下拉列表设置值
- 链接的自定义顺序列表
- 链接下拉列表选择列表代码 -- 连接数据
- 设置活动链接(不带 ul 列表)
- 添加弹出式JS滑块到菜单列表-链接不起作用