简体   繁体   English

将jQuery脚本转换为纯JavaScript?

[英]Convert jQuery script to pure javascript?

HTML: HTML:

<button id='etiquette-xs-button' type="button" class='navbar-toggle margin-left-10px' data-toggle="collapse" data-target="#navigation-etiquette-collapse"> <!-- Set the data-target equal to the ID name of the div that holds the class of 'navbar-collapse' so that the main navigation menu doesn't collapse as well. #etiquette-xs-button only serves for selecting this button so the toggle of main navigation isn't selected. -->
        <span class='sr-only'>Toggle navigation</span>
        <span class='icon-bar'></span>
        <span class='icon-bar'></span>
        <span class='icon-bar'></span>
        </button>

        <div class="navbar-brand">Etiquette shortcut menu:</div>

</div><!-- END '#navbar-header' -->
<div id='navigation-etiquette-collapse' class='collapse navbar-collapse'><!-- ID "navigation-etiquette-collapse' is referenced only for data-target for <button data-toggle="collapse" -->
    <ul class='nav navbar-nav' itemscope itemtype="http://www.schema.org/SiteNavigationElement">

       <li class='dropdown xs-fix-menu'><a href="#" class='dropdown-toggle' data-toggle="dropdown">Etiquette Concepts: (First half) <b class='caret'></b></a>
          <ul class='dropdown-menu'><!-- Don't forget that this <ul> needs class='dropdown-menu' to make it a dropdown menu for mobile -->
             <li itemprop="name"><a onclick="toggleMobileHide()" itemprop="url" href="#header-container"><span>Introduction (back to top)</span></a></li><!-- #header-container is inside file: includes/header-start.php -->
             <li itemprop="name"><a onclick="toggleMobileHide()" itemprop="url" href="#general-concepts"><span>General Concepts</span></a></li><!-- Target: #systems-collapse --><!-- Black-Cat-Kenpo -->
             <li itemprop="name"><a onclick="toggleMobileHide()" itemprop="url" href="#becoming-a-student"><span>Becoming a Student</span></a></li>
             <li itemprop="name"><a onclick="toggleMobileHide()" itemprop="url" href="#outside-the-martialarts-school"><span>Outside the martial arts school</span></a></li>
             <li itemprop="name"><a onclick="toggleMobileHide()" itemprop="url" href="#etiquette-and-safety"><span></span>Etiquette when entering school</a></li>
             <li itemprop="name"><a onclick="toggleMobileHide()" itemprop="url" href="#etiquette-in-the-reception-area"><span>Etiquette in reception area</span></a></li>
             <li itemprop="name"><a onclick="toggleMobileHide()" itemprop="url" href="#uniform-and-belt"><span>Uniform and Belt</span></a></li>
             <li itemprop="name"><a onclick="toggleMobileHide()" itemprop="url" href="#advice-from-the-master"><span>Advice from the Master</span></a></li>
             <li itemprop="name"><a onclick="toggleMobileHide()" itemprop="url" href="#before-the-class-starts"><span>Before the class starts</span></a></li>
             <li itemprop="name"><a onclick="toggleMobileHide()" itemprop="url" href="#during-class"><span>During class & requirements</span></a></li>              
          </ul>

This jquery script works to hide navigational menu for bootstrap 3, but it is in jquery. 这个jquery脚本可以隐藏bootstrap 3的导航菜单,但是它在jquery中。 What is its conversion into pure javascript? 转换成纯JavaScript是什么?

<script>    
    $(document).ready(function () {
    $('.dropdown-menu a').click(function(event) {
            $('#etiquette-xs-button.navbar-toggle').click();          
        });       
    });
</script>

I have tried this [below], but it didn't work. 我在下面尝试过,但是没有用。 Evidently there are event listeners that (I think) are preventing me from just adding and removing classes. 显然,有一些事件监听器(我认为)阻止了我仅添加和删除类。 .hide = display:none; .hide = display:none; And .collapse.in = display:block; 和.collapse.in = display:block;

<script>
    function toggleMobileHide() {
    var element = document.getElementbyId('etiquette-xs-button');
            element.classList.toggle('collapse', 'navbar-toggle');
    }
</script>

Using pure JavaScript with the new ES6 syntax: 使用纯JavaScript和新的ES6语法:

$(document).ready(function () {
    $('.dropdown-menu a').click(function(event) {
            $('#etiquette-xs-button.navbar-toggle').click();          
        });       
    });
});

Would translate to: 将转换为:

const btns = document.querySelectorAll('.dropdown-menu a');
const elem = document.getElementbyId('etiquette-xs-button');

function toggleDiv() {
    elem.classList.toggle('collapse', 'navbar-toggle');
}

btns.forEach(btn => btn.addEventListener('click', toggleDiv));

But if you prefer JavaScript without ES6 syntax (for IE compatibilty maybe), then: 但是,如果您更喜欢没有ES6语法的JavaScript(也许是为了IE兼容性),则:

var btns = document.querySelectorAll('.dropdown-menu a');
var elem = document.getElementbyId('etiquette-xs-button');

function toggleDiv() {
    elem.classList.toggle('collapse', 'navbar-toggle');
}

btns.forEach(
    function (btn){
        btn.addEventListener('click', function () {
            //toggled twice because IE cant handle a *toggle* with more than one parameter
            elem.classList.toggle('collapse');
            elem.classList.toggle('navbar-toggle');
        });
    }

Note: If you are using any of the two snippets above, you do not need to add an inline onClick anymore thus giving you a cleaner html file. 注意:如果您使用的是以上两个片段中的任何一个,则无需再添加内联onClick ,从而为您提供了一个更干净的html文件。 Just make sure you placed the script after the body content (for example, at the footer). 只要确保将脚本放置在正文内容之后即可(例如,在页脚处)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM