javascript - 修改 anchor 元素的 href 属性值

标签 javascript jquery html

我有一个脚本可以修改 anchor 的 href 属性值 <a>元素。对于移动开发,它应该只在特定浏览器窗口大小以下触发。以下是我目前正在处理的脚本。

JS-http://jsfiddle.net/eof8kpsj/1/

(function($){
    'use strict';



    var mobileMenuDrawer = {

        init : function() {

            $('.region-primary-menu').addClass('primary-mobile-menu');
            $('.primary-mobile-menu .menu.-primary > .menu-item').addClass('mobile-menu-item');
            $('.primary-mobile-menu .menu.-primary > .mobile-menu-item > .link').off('click').on('click', function() {
                $(this).closest('.mobile-menu-item').toggleClass('-active');
            })
        },

        clear : function() {
            $('.primary-mobile-menu, .mobile-menu-item').removeClass('primary-mobile-menu mobile-menu-item');
        }
    }

    var addHash = {

        init : function() {

            if ($('.region-primary-menu').hasClass('primary-mobile-menu')) {

                $('.primary-mobile-menu .mobile-menu-item > .link').each(function() {
                    // console.log($(this).attr('href'));
                    let currentUrl = $(this).attr('href');

                    if($(this).prop('href') != '#' + currentUrl) {
                        $(this).prop('href', '#' + currentUrl);
                    }
                });
            }

            else {

                $('.primary-mobile-menu .mobile-menu-item > .link').each(function() {

                    $(this).removeAttr('#');

                });

            }
        }
    }


    $(document).ready(function() {

        if ($(window).outerWidth() <= 1024) {
            mobileMenuDrawer.init();
        }

        else {
            mobileMenuDrawer.clear();
        }

        addHash.init();


    });

    $(window).on('resize', function() {

        if ($(window).outerWidth() <= 1024) {
            mobileMenuDrawer.init();
            addHash.init();
        }

        else {
            mobileMenuDrawer.clear();
        }
    });



})(jQuery)

此处的逻辑基本上修改了 anchor 上的 href 属性值 <a>元素。它仅向现有 href 添加哈希值(value)。唯一的问题是,每当我尝试调整大小时,它都会不断触发逻辑或事件。我已经添加了 condition如果它有一个 hash 到检查值包含在 href 中属性,但问题仍然存在。

    var addHash = {

        init : function() {

            if ($('.region-primary-menu').hasClass('primary-mobile-menu')) {

                $('.primary-mobile-menu .mobile-menu-item > .link').each(function() {
                    // console.log($(this).attr('href'));
                    let currentUrl = $(this).attr('href');

                    if($(this).prop('href') != '#' + currentUrl) {
                        $(this).prop('href', '#' + currentUrl);
                    }
                });
            }

            else {

                $('.primary-mobile-menu .mobile-menu-item > .link').each(function() {

                    $(this).removeAttr('#');

                });

            }
        }
    }

最佳答案

解决方法在这里

(function($){
  'use strict';  

  var mobileMenuDrawer = {  
    init : function() {
      $('.region-primary-menu').addClass('primary-mobile-menu');
      $('.primary-mobile-menu .menu.-primary > .menu-item').addClass('mobile-menu-item');
      $('.primary-mobile-menu .menu.-primary > .mobile-menu-item > .link').off('click').on('click', function() {
        $(this).closest('.mobile-menu-item').toggleClass('-active');
      })
    },
    
    clear : function() {
      $('.primary-mobile-menu, .mobile-menu-item').removeClass('primary-mobile-menu mobile-menu-item');
    }
  }
    
  var addHash = {
    init : function() {
      if ($('.region-primary-menu').hasClass('primary-mobile-menu')) {
        $('.primary-mobile-menu .mobile-menu-item > .link').each(function() {
          let currentUrl = $(this).attr('href');
    
          if(currentUrl.indexOf('#') === -1) {
            $(this).prop('href', '#' + currentUrl);
          }
        });
      } else {
        $('.primary-mobile-menu .mobile-menu-item > .link').each(function() {
     
          let currentUrl = $(this).attr('href');
          currentUrl = currentUrl.replace('#', '');
          $(this).attr('href', currentUrl);
                        
        });
      }
    }
  }
     
  $(document).ready(function() {
    if ($(window).outerWidth() <= 1024) {
      mobileMenuDrawer.init();
    } else {
      mobileMenuDrawer.clear();
    }
    addHash.init();
  });
    
  $(window).on('resize', function() {
    if ($(window).outerWidth() <= 1024) {
      mobileMenuDrawer.init();
      addHash.init();
    } else {
      mobileMenuDrawer.clear();
    }
  });
})(jQuery)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="region-primary-menu primary-mobile-menu">
    <li class="mobile-menu-item">
        <a href="link" class="link">Link</a>
    </li>
     <li class="mobile-menu-item">
        <a href="link" class="link">Link</a>
    </li>
     <li class="mobile-menu-item">
        <a href="link" class="link">Link</a>
    </li>

</ul>

希望对你有帮助

关于javascript - 修改 anchor 元素的 href 属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53292180/

相关文章:

javascript - 获取包含特定元素的完整单词

javascript - 如何在 AngularJS 中正确注入(inject)模块

javascript - Angular 使用错误的路由器导出

javascript - 在辅助屏幕上定位弹出窗口

javascript - 获取jquery中动态生成的 anchor 标记的值?

javascript - Knockout 不计算 attr 绑定(bind)内的可观察值

javascript - 我应该在代码中哪里实现 .sort() ?

jquery - 如何将鼠标悬停在 div 框上并使其第一个子项出现?

html - 将图像固定在居中文本的右侧而不移动文本

html - IE8 中的背景图像外观