156

この jQuery コード (レスポンシブ メニュー セクションで使用される) を純粋な JavaScript に変換する方法を探しています。

実装が難しい場合は、他の JavaScript フレームワークを使用してもかまいません。

$('.btn-navbar').click(function()
{
    $('.container-fluid:first').toggleClass('menu-hidden');
    $('#menu').toggleClass('hidden-phone');

    if (typeof masonryGallery != 'undefined') 
        masonryGallery();
});
4

13 に答える 13

262

2014 年の回答:classList.toggle()は標準であり、ほとんどのブラウザでサポートされています

古いブラウザーでは、 classList.toggle() に classlist.js を使用できます。

var menu = document.querySelector('.menu') // Using a class instead, see note below.
menu.classList.toggle('hidden-phone');

余談ですが、ID を使用するべきではありません (ID はグローバルを JSオブジェクトに漏らしwindowます)。

于 2014-04-16T09:40:33.370 に答える
0

これを試してください(うまくいくといいのですが):

// mixin (functionality) for toggle class 
function hasClass(ele, clsName) {
    var el = ele.className;
    el = el.split(' ');
    if(el.indexOf(clsName) > -1){
        var cIndex = el.indexOf(clsName);
        el.splice(cIndex, 1);
        ele.className = " ";
        el.forEach(function(item, index){
          ele.className += " " + item;
        })
    }
    else {
        el.push(clsName);
        ele.className = " ";
        el.forEach(function(item, index){
          ele.className += " " + item;
        })
    }
}

// get all DOM element that we need for interactivity.

var btnNavbar =  document.getElementsByClassName('btn-navbar')[0];
var containerFluid =  document.querySelector('.container-fluid:first');
var menu = document.getElementById('menu');

// on button click job
btnNavbar.addEventListener('click', function(){
    hasClass(containerFluid, 'menu-hidden');
    hasClass(menu, 'hidden-phone');
})`enter code here`
于 2016-11-15T07:51:04.050 に答える
0

className で split(" ") を使用した IE >= 9 のコードを次に示します。

function toggleClass(element, className) {
    var arrayClass = element.className.split(" ");
    var index = arrayClass.indexOf(className);

    if (index === -1) {
        if (element.className !== "") {
            element.className += ' '
        }
        element.className += className;
    } else {
        arrayClass.splice(index, 1);
        element.className = "";
        for (var i = 0; i < arrayClass.length; i++) {
            element.className += arrayClass[i];
            if (i < arrayClass.length - 1) {
                element.className += " ";
            }
        }
    }
}
于 2017-07-05T13:21:21.173 に答える