首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在单独的列中显示每个嵌套列表,最好是在使用CSS Grid时?

如何在单独的列中显示每个嵌套列表,最好是在使用CSS Grid时?
EN

Stack Overflow用户
提问于 2019-01-26 04:55:04
回答 2查看 228关注 0票数 1

我有一些嵌套列表。有些深度可达4-5级。例如:

代码语言:javascript
复制
<ul>
    <li>
        <span class="is-parent">parent</span>
        <ul class="children">
            <li class="no-child">child</li>
            <li class="no-child">child</li>
            <li class="no-child">child</li>
        </ul>
    </li>
    <li>some child</li>
    <li>another child</li>
<ul>

此列表显示在css网格列中,第一个列是特定的。我已经使用以下命令设置了列

代码语言:javascript
复制
grid-template-columns: repeat(5, 1fr);

当我单击parent时,我希望嵌套的<ul>显示在下一列中。使用vanila JavaScript最好的方法是什么?

类似于下面的示例:https://mynameistechno.github.io/finderjs/#examples

但不使用库或插件。

EN

回答 2

Stack Overflow用户

发布于 2019-01-26 05:48:23

HTML

代码语言:javascript
复制
<ul>
  <li>
    <span class="is-parent">parent</span>
    <ul class="children hide">
        <li class="no-child">child</li>
        <li class="no-child">child</li>
        <li class="no-child">child</li>
    </ul>
  </li>
  <li>some child</li>
  <li>another child</li>
<ul>     

CSS

代码语言:javascript
复制
 ul {
     grid-template-columns: repeat(auto-fill, 1fr);
 }
 .hide {
     display: none;
 }

JS

代码语言:javascript
复制
document.querySelectorAll('is-parent').forEach(node => 
    node.parentNode.addEventListener('click', (ev) => {
        let cl = ev.currentTarget.querySelector('ul').classList
        cl.contains('hide') ? cl.remove('hide') : cl.add('hide')
    }
}
票数 0
EN

Stack Overflow用户

发布于 2019-01-26 06:11:24

没有jQuery库真的很难做到这一点。

但是在这里我只用javascript写了一个例子。

这个想法是,当您单击is-parent时,您将clone Children并附加到container

您可以在此示例的基础上进行构建。

我希望这能以某种方式帮助你

代码语言:javascript
复制
var x = document.getElementsByClassName("is-parent");
var container = document.getElementsByClassName("container")[0];
function bind(items){
new Array(items).forEach(function(item, index){
  item = item[0]
  item.addEventListener("click", function(){
  var children= [].filter.call(item.parentElement.childNodes, function(node) {
    return node.className == "children"
   })[0];
   var i= children.cloneNode(true);
   container.appendChild(i);
   i.style.display = "block";
   
   i.className = index;
  });
});
}
bind(x);
代码语言:javascript
复制
.children{
display:none;
}

ul{
pointer:default;
}

div{
  display: grid;
  grid-template-columns: auto auto auto;
  background-color: #2196F3;
  padding: 10px;

}
代码语言:javascript
复制
<div class="container">
<ul>
    <li>
        <span class="is-parent">parent</span>
        <ul class="children">
            <li class="no-child">child</li>
            <li class="no-child">child</li>
            <li class="no-child">child</li>
        </ul>
    </li>
    <li>some child</li>
    <li>another child</li>
</ul>

</div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54372633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档