javascript - 在 Joomla (1.7.0) 中点击显示嵌套列表

标签 javascript html css joomla

我在 Joomla 显示位于网站左侧的导航菜单时遇到问题。我希望在单击其父项时打开一些子菜单。我想要的效果显示在提供的 Codepen 中。但我想单击而不是将鼠标悬停在该元素上。

Joomla 的问题是我必须将“父 li-item”链接到文章。即使我用 javascript 删除 href,如果我单击“li”项,joomla 也会重新加载页面。这将取消所需的效果(我尝试使用 javascript 应用特定类以在单击后在嵌套列表上将“display:none”设置为“display:block”)。

我更喜欢使用 css、html、javascript 或 joomla 覆盖的解决方案。

PS:我知道我使用的是旧版本的 Joomla。我可能会在不久的将来升级它(当我被授予访问网站控制面板的权限时)。

PS2:我知道有一个付费插件可以做到这一点,但我在一个慈善网站上工作,我想将插件保持在最低限度。我也很想知道如何在代码中做到这一点!

HTML

<ul>
<li>
<a href="something">Click me and don t load this link with Joomla</a>
<ul>
<li>Show me on click (not hover)</li>
</ul>
</li>
</ul>

.

CSS

ul>li>ul{
  display: none;
}
ul>li:hover>ul{
  display: block;
}

Codepen

最佳答案

我设法用这段代码做到了:

函数 hasClass 检查元素是否具有特定类。

函数 menuMechanics 禁用链接。并添加或删除类以显示或隐藏嵌套的 ul。

代码的最终规则是在单击后将 menuMechanics 函数添加到所有“has-nested-children”类元素。

<script type="text/javascript">
function hasClass(element, cls) {
    return (' ' + element.className + ' ').indexOf(' ' + cls + ' ') > -1;
    }

function menuMechanics(event){
    event.preventDefault();
    if(hasClass(this.parentElement, "active") === true){
        this.parentElement.className = this.parentElement.className.replace("active", "");
    }
    else{
        this.parentElement.className += " active";
    }
}

hasNestedChildren = document.getElementsByClassName('has-nested-children');
    for(i=0; i<hasNestedChildren.length; i++){
        hasNestedChildren[i].addEventListener("click", menuMechanics);
    }
</script>

关于javascript - 在 Joomla (1.7.0) 中点击显示嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36858199/

相关文章:

css - 使用相同的规则组合扩展和混合

javascript - 进一步理解javascript init函数设置

javascript - 无法读取未定义的属性 'fragment'

html - :hover is inconsistent and very jittery on absolutely positioned element

html - 由图像组成的导航栏

html - Bootstrap 将一张图片放在另一张图片上?

jquery - 如何在单击时替换 h3 标签中的文本而不更改其中的其他内容?

Javascript 打开 xml 但不执行函数内的任务

javascript - 如何将 TypeScript import 语句转换为 JS Require 语句

php - 通过Jquery AJAX发送两条数据?