修改锚元素的href属性的值

时间:2018-11-14 02:06:44

标签: javascript jquery html

我有一个脚本,用于修改锚点<a>元素的href属性值。假定它仅在特定浏览器窗口大小以下触发才能进行移动开发。下面是我目前正在使用的脚本。

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)

这里的逻辑基本上是修改锚点<a>元素上的href属性值。它仅将哈希添加到现有的href值中。唯一的问题是,每当我尝试调整大小时,它都会触发逻辑或事件。如果在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('#');

                });

            }
        }
    }

1 个答案:

答案 0 :(得分: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() {
          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>

希望这对您有帮助