【问题标题】:WordPress Divi Theme - Anchor Link Opens Specific Tab ToggleWordPress Divi 主题 - 锚链接打开特定选项卡切换
【发布时间】:2020-03-02 21:13:59
【问题描述】:

我正在尝试获取锚链接以打开特定页面上的标签。

类似https://jonathanbossenger.com/using-anchor-links-to-open-accordions-and-tabs-in-divi/ 的解决方案仅在锚链接与选项卡位于同一页面时才有效。

我在 Stack 上发现了一个解决此问题的不同线程,但它在我无权访问的聊天中解决了最终解决方案 (Wordpress Divi Theme - Anchor link opens tab toggle)。

我可以在他们的网站上看到他们能够让它工作 (https://www.elkodowntown.org/our-members/#member-tabs|3)。

我如何访问 Elko Downtown 的站点代码以找到下面的 JavaScript 最终版本以使其工作?

  jQuery(function($) {
        $('.menu-item-179 a').on('click', function(event){
            tabScroll('.et_pb_tab_0');
            return false;
        });
        $('.menu-item-180 a').on('click', function(event){
            tabScroll('.et_pb_tab_1');
            return false;
        });
        $('.menu-item-181 a').on('click', function(event){
            tabScroll('.et_pb_tab_2');
            return false;
        });
        $('.menu-item-182 a').on('click', function(event){
            tabScroll('.et_pb_tab_3');
            return false;
        });
        $('.menu-item-183 a').on('click', function(event){
            tabScroll('.et_pb_tab_4');
            return false;
        });

    function tabscroll(target) {
        $("html, body").animate({ scrollTop: $('#member-tabs').offset().top }, 1000);
        setTimeout($('#member-tabs' + target + ' a').click(), 2000 );
    }

    $(function hash() {
        var hash = window.location.hash.replace('#', "");

        if (hash == '#shop') { tabscroll('.et_pb_tab_1'); }
        if (hash == '#service') { tabscroll('.et_pb_tab_0'); }
        if (hash == '#eat-drink') { tabscroll('.et_pb_tab_2'); }
        if (hash == '#arts-entertainment') { tabscroll('.et_pb_tab_3'); }
        if (hash == '#stay') { tabscroll('.et_pb_tab_4'); }
    });
});

【问题讨论】:

    标签: javascript html css wordpress


    【解决方案1】:

    通过网络传输的每一行 javascript 通过检查浏览器都是可见的。如果您只想看看他们最终确定的代码如下所示。

    但是,如果您正在使用 WP 并尝试使用 JS/JQuery 做事,我强烈建议您首先学习如何在 WP 之外执行功能并了解发生了什么,您从中获取的代码将不会总是匹配你的页面结构/元素,你总是想知道为什么事情不工作。

    这是为他们做的代码:

    
        function _setTab(){
            // get current hash value
            var curHash = window.location.hash.substr(1);
            // only continue if hash provided and scoped to member tabs
            if( !curHash || !curHash.match('member-tabs') ){ return false; }
    
            // split and int val tab num
            curHash = parseInt(curHash.split('|')[1]);
    
            // ignore if tab is current state
            if( curHash === window._tabSelected ){ return false; }
            // set current tab to window
            window._tabSelected = curHash;
    
            // add click event to tab selected
            switch(curHash){
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                    jQuery('#member-tabs .et_pb_tab_'+curHash+' a').click();
                break;
    
                default:
                    return false;
                break;
            }
    
            // scroll to tabs container
            _scrollToTabs();
        }
    
        // scroll to member tabs container with 50px offset
        function _scrollToTabs(){
            var oTabs = jQuery('#member-tabs');
            if( oTabs.length > 0 ){
                jQuery('html,body').animate({
                    scrollTop: (oTabs.offset().top - 50)
                }, 1000);
            }
            return false;
        }
    
        // set falsey state for tab selected on load
        window._tabSelected = false;
    
        // we need to attach to window load because the tabs functions are initialized later in document
        jQuery(window).on('load', function(){
            // check for initial hash state
            _setTab();
    
            // add hash change window listener
            jQuery(window).on('hashchange', function(){
                _setTab()
            });
    
            // void submenu when we are in member section 
            var curPath = window.location.pathname;
            if( curPath.match('our-members') ){
                // only change hash and do not reload page
                jQuery('#menu-item-98 ul li a').on('click', function(e){
                    e.stopImmediatePropagation();
                    window.location.hash = jQuery(this).prop('hash');
                    return false;
                });
            }
        });
    
    

    【讨论】:

    • 我完全理解您关于理解 WP 之外的 JQuery 和我的主题的说明 - 我将计划在将此添加到我的网站之前这样做。作为后续行动,我的网站上有多个产品类别页面,我正在考虑将其添加到 (americanmadecutlery.com/categories/kitchen-knives)。最佳做法是多次完整地添加这段代码(使用不同的 CSS ID),还是有更好的方法来压缩它?
    • 您只需添加一次,上面的代码只是从 URL /#this-part 中获取哈希,然后找到管道后面的数字并单击相应的选项卡。无需复制代码,只需确保选择器(其他人在他们的选项卡部分放置一个 ID,而您没有)在您希望运行此代码的所有页面上的选项卡部分相同。
    猜你喜欢
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    相关资源
    最近更新 更多