jQuery Isotope hash-history:美化哈希 URL

发布于 2024-12-06 16:30:04 字数 552 浏览 1 评论 0原文

我正在使用 同位素 和哈希历史记录。它工作得很好,但我对 URL 不满意 - 我想简化 &把它清理干净。

目前使用:

var href = $this.attr('href').replace( /^#/, '' );
var option = $.deparam( href, true );`

在此标记上:

<li><a href="#filter=.work/">Work</a></li>

那么,我的问题:如何使其与以下标记一起使用?

<li><a href="#/work/">Work</a></li>

使用过滤器,所有其他同位素选项都被锁定,所以我希望删除对过滤器的引用。

提前致谢!

I'm using Isotope with Hash History. It works great, but I'm not happy with the URL - I'd like to simplify & clean it up.

Currently using:

var href = $this.attr('href').replace( /^#/, '' );
var option = $.deparam( href, true );`

On this markup:

<li><a href="#filter=.work/">Work</a></li>

So, my question: how can I make it work with the following markup?

<li><a href="#/work/">Work</a></li>

I'm only using filters, all other Isotope options are locked down, so I'm hoping to remove the reference to filters.

Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

淡笑忘祈一世凡恋 2024-12-13 16:30:04

我正在使用这个:

function getHashFilter() {
  var hash = location.hash;
  // get filter=filterName
  var matches = location.hash.match(/^#?(.*)$/)[1]; // this is to get the name of the class
  var hashFilter = matches;
  return hashFilter;

}

$( function() {
  var $container = $('. isotope');

  // bind filter button click
  var $filters = $('#filters').on( 'click', 'span', function() {
    var filterAttr = $( this ).attr('data-filter');
    // set filter in hash
    location.hash = '/' + filterAttr.substr(1); // adding the slash for the url
  });

  var isIsotopeInit = false;

  function onHashchange() {
    var hashFilter = getHashFilter();
    if ( !hashFilter && isIsotopeInit ) {
      return;
    }
    isIsotopeInit = true;
    // filter isotope
    $container.isotope({
      itemSelector: '.element-item',
      filter: '.' + hashFilter.substr(1) //adding the . so it can match the data-filter
    });
    // set selected class on button
    if ( hashFilter ) {
      $filters.find('.is-checked').removeClass('is-checked');
      $filters.find('[data-filter=".' + hashFilter + '"]').addClass('is-checked');
    }
  }

  $(window).on( 'hashchange', onHashchange );
  // trigger event handler to init Isotope
  onHashchange();
});

我意识到 * 之后将不起作用。因此,您需要添加另一个类/数据过滤器来显示所有内容。

I am using this:

function getHashFilter() {
  var hash = location.hash;
  // get filter=filterName
  var matches = location.hash.match(/^#?(.*)$/)[1]; // this is to get the name of the class
  var hashFilter = matches;
  return hashFilter;

}

$( function() {
  var $container = $('. isotope');

  // bind filter button click
  var $filters = $('#filters').on( 'click', 'span', function() {
    var filterAttr = $( this ).attr('data-filter');
    // set filter in hash
    location.hash = '/' + filterAttr.substr(1); // adding the slash for the url
  });

  var isIsotopeInit = false;

  function onHashchange() {
    var hashFilter = getHashFilter();
    if ( !hashFilter && isIsotopeInit ) {
      return;
    }
    isIsotopeInit = true;
    // filter isotope
    $container.isotope({
      itemSelector: '.element-item',
      filter: '.' + hashFilter.substr(1) //adding the . so it can match the data-filter
    });
    // set selected class on button
    if ( hashFilter ) {
      $filters.find('.is-checked').removeClass('is-checked');
      $filters.find('[data-filter=".' + hashFilter + '"]').addClass('is-checked');
    }
  }

  $(window).on( 'hashchange', onHashchange );
  // trigger event handler to init Isotope
  onHashchange();
});

I realised that * will not work after this. So you need to add another class/data-filter to show all.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文