javascript - 使下拉菜单可见的javascript

标签 javascript jquery html razor umbraco

我在 Umbraco 中使用 razor 脚本制作了一个下拉系统。我终于让所有的 child 都工作了,但是如何隐藏应该是下拉列表的子项目?我尝试使用 javascript 进行一些操作,但这似乎会打开所有下拉菜单,而不是单独打开每个下拉菜单。

这是我的代码:

<div class="col-sm-3">
  <div class="well well-lg span-padding extra-padding top background-light">
    <ul class="nav nav-list tree">
      @ {
        var documentRootNodeId = Model.Content.GetPropertyValue("documentRoot", true); // Fetch recursive document root id.
        var selection = Umbraco.TypedContent(documentRootNodeId).Children.Where("Visible"); // Select all nodes below the document root.
      }
      @foreach(var item in Model.Content.Ancestor(1).Descendants("menu")) {
        foreach(var ItemChild in @item.Children("hoofdstuk")) { 
        <li> @ItemChild.Name </li>
          foreach(var Subitem in @ItemChild.Children) { 
          <li><a href = "@Subitem.Url"> @Subitem.Name </a></li>
              if (Subitem.Children.Any()) {
                foreach(var Finalitem in @Subitem.Children) { 
                  <ul>
                    <li> < a href = "@Finalitem.Url" > @Finalitem.Name </a></li>
                  </ul>
                }
              }
            }
          }
        }
      }
    </ul>
  </div>
</div>

Javascript:

function myFunction(a) {
    var itemcount = a.parentNode.getElementsByClassName("sub").length;
    for (i = 0; i < itemcount; i++) { 
        a.parentNode.getElementsByClassName("sub")[i].classList.toggle("show");
    }
}

这是它显示的内容:

image

Sub-Subtest1 和 2 需要隐藏,直到我们单击它的祖先 SubTest1。 sub-subtest9 也是如此。

我似乎无法让它动态工作。如果我用 javascript 创建一些东西,它会立即打开所有下拉列表,而不是单独打开。

最佳答案

首先,我建议您使用 Visual Studio,它将帮助您解决代码问题。您应该修复 html 结构并正确嵌套列表的元素。您将 li 作为 li 的直接子级,这是无效的。

<div class="col-sm-3">
    <div class="well well-lg span-padding extra-padding top background-light">
        <ul class="nav nav-list tree">
            @{
                var documentRootNodeId = Model.Content.GetPropertyValue("documentRoot", true); // Fetch recursive document root id.
                var selection = Umbraco.TypedContent(documentRootNodeId).Children.Where("Visible"); // Select all nodes below the document root.
            }
            @foreach (var item in Model.Content.Ancestor(1).Descendants("menu"))
            {
                foreach (var ItemChild in item.Children("hoofdstuk"))
                {
                    <li class="item">
                        @if (ItemChild.Children.Any())
                        {
                            <ul class="submenu">
                                @foreach (var Subitem in ItemChild.Children)
                                {
                                    <li class="item">
                                        <a href="@Subitem.Url"> @Subitem.Name </a>
                                        @if (Subitem.Children.Any())
                                         {
                                            foreach (var Finalitem in Subitem.Children)
                                            {
                                                <ul class="submenu">
                                                    <li> <a href="@Finalitem.Url"> @Finalitem.Name </a></li>
                                                </ul>
                                            }
                                        }
                                    </li>

                                }
                            </ul>
                        }
                    </li>
                }
            }
        </ul>
    </div>
</div>

然后您可以使用 jQuery 轻松显示子菜单。使用[children][1]仅检索第一级子菜单:

$(".item").click(function(){
    $(this).children(".submenu").toggle(); //it will display or hide your submenu when clicking the item.
});

并且你的子菜单应该默认隐藏,你可以使用 css 来做到这一点:

.submenu{
    display: none;
}

注意:为了使代码更清晰,我建议您使用 Razor 助手为子列表创建递归函数。

关于javascript - 使下拉菜单可见的javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47260183/

相关文章:

javascript - jquery循环中函数之间的延迟

javascript - Windows 8 商店应用程序和 jQuery - MSApp.execUnsafeLocalFunction

html - 不知道如何在 HTML/CSS 中应用自定义字体

javascript - 在 iframe 中使用 jquery-mobile 调用 html 页面

javascript - 编译多个 hash.location

javascript - document.body.innerHTML = document.body.innerHTML 杀死页面?

javascript - 如何使用ajax将js数组发送到servlet?

javascript - 无法删除具有空值的 JSON 项目

jQuery 数据表隐藏列

javascript - react .js : Set innerHTML vs dangerouslySetInnerHTML