Уменьшить или упростить скрипт jquery

#jquery

#jquery

Вопрос:

Я не слишком разбираюсь в правилах jQuery, и я создал несколько правил для заголовка моей темы, чтобы показывать и скрывать некоторые элементы. Я хотел бы знать, могу ли я сделать его более простым? И как мне добавить его в файл .js, добавленный в мою тему?

Вот код :

 <script>
jQuery(document).ready(function($) {
            var open = false;

            var openSidebar = function() {
                $('div#menu500').addClass('ciShow');
                $('.ciMenuButton').addClass('ciMenuButton-close');
                $('.ciSearchButton').addClass('ciHide');
                $('.ciLanguageButton-wrap').addClass('ciHide');
                $('.ciHeader-logoWrap').addClass('ciHide');
                $('html').addClass('scroll-disabled');
                open = true;

            }
            var openSearchbar = function() {
                $('div#search500').addClass('ciShow ciSearchshow');
                $('.ciMenuButton').addClass('ciMenuButton-close');
                $('.ciSearchButton').addClass('ciHide');
                $('.ciLanguageButton-wrap').addClass('ciHide');
                $('.ciHeader-logoWrap').addClass('ciHide');
                $('html').addClass('scroll-disabled');
                open = true;
            }
            var openLangbar = function() {
                $('ul.ciLanguageButton-menu').addClass('ciShow');
                $('.ciSearchButton').addClass('ciHide');
                $('.ciLanguageButton-wrap').addClass('ciShow');
                open = true;
            }

            var closeAll = function() {
                $('div#menu500').removeClass('ciShow');
                $('div#search500').removeClass('ciShow ciSearchshow');
                $('.ciMenuButton').removeClass('ciMenuButton-close');
                $('.ciSearchButton').removeClass('ciHide');
                $('.ciLanguageButton-wrap').removeClass('ciHide ciShow');
                $('.ciHeader-logoWrap').removeClass('ciHide');
                $('ul.ciLanguageButton-menu').removeClass('ciShow');
                $('.ciLanguageButton').removeClass('ciLanguageButton-open');
                $('html').removeClass('scroll-disabled');
                open = false;
            }

            $('button.ciMenuButton').click(function(event) {
                event.stopPropagation();
                var toggle = open ? closeAll : openSidebar;
                toggle();
            });
            $('button.ciSearchButton').click(function(event) {
                event.stopPropagation();
                var toggle = open ? closeAll : openSearchbar;
                toggle();
            });
            $('button.ciLanguageButton').click(function(event) {
                event.stopPropagation();
                var toggle = open ? closeAll : openLangbar;
                toggle();
            });

            $(document).click(function(event) {
                if (!$(event.target).closest('div.ciSidebar--inner').length) {
                    closeAll();
                }
            });
</script>
 

спасибо за вашу помощь.

Комментарии:

1. Это чистый вопрос JS / jQuery, вы должны задать его в stackoverflow вместо этого, этот стек предназначен для вопросов WP

2. Вы можете хранить все имена классов в массиве и использовать индекс массива для добавления / удаления класса

Ответ №1:

Мы можем оптимизировать, объявив ссылку на каждый HTML-элемент, чтобы увеличить скорость выполнения jquery.

 jQuery(document).ready(function($) {
    
    var open = false;
    let html=$('html');
    let ref=$('.ciSearchButton,.ciLanguageButton-wrap,.ciHeader-logoWrap');
    let searchRef=$('div#search500');
    let menuRef=$('div#menu500');
    let wrapRef=$('ul.ciLanguageButton-menu,.ciLanguageButton-wrap');

    let ciMenuButton=$('button.ciMenuButton');
    let ciSearchButton=$('button.ciSearchButton');
    let ciLanguageButton=$('.ciLanguageButton');


    var openSidebar = function() {
        open amp;amp; closeAll();
        menuRef.addClass('ciShow');
        ciMenuButton.addClass('ciMenuButton-close');
        ref.addClass('ciHide');
        html.addClass('scroll-disabled');
        open = true;
    }
    
    var openSearchbar = function() {
        open amp;amp; closeAll();
        searchRef.addClass('ciShow').addClass("ciSearchshow");
        ciMenuButton.addClass('ciMenuButton-close');
        ref.addClass('ciHide');
        html.addClass('scroll-disabled');
        open = true;
    }
    
    var openLangbar = function() {
        open amp;amp; closeAll();
        wrapRef.addClass('ciShow');
        ciSearchButton.addClass('ciHide');
        open = true;
    }

    var closeAll = function() {
        menuRef.removeClass('ciShow');
        searchRef.removeClass('ciShow').removeClass('ciSearchshow');
        ciMenuButton.removeClass('ciMenuButton-close');
        ref.removeClass('ciHide');
        wrapRef.removeClass('ciShow');
        ciLanguageButton.removeClass('ciLanguageButton-open');
        html.removeClass('scroll-disabled');
        open = false;
    }

    ciMenuButton.click(function(event) {
        event.stopPropagation();
        openSidebar();
    });
    ciSearchButton.click(function(event) {
        event.stopPropagation();
        openSearchbar();
    });
    ciLanguageButton.click(function(event) {
        event.stopPropagation();
        openLangbar();
    });

    $(document).click(function(event) {
        if (!$(event.target).closest('div.ciSidebar--inner').length) {
            closeAll();
        }
    });
});