【问题标题】:Link from another page element to a specific data-filter从另一个页面元素链接到特定的数据过滤器
【发布时间】:2020-03-29 21:29:38
【问题描述】:

我有一个具有过滤属性的 HTML 投资组合页面

                    <ul class="portfolio-filters list-inline">
                        <li class="filter active" data-filter="all">All</li>
                        <li class="filter" data-filter="webdesign">Web Design</li>
                        <li class="filter" data-filter="responsive">Responsive</li>
                        <li class="filter" data-filter="wordpress">Wordpress</li>
                    </ul>

我还有另一个包含一些服务的 HTML 页面。另一页中我的一个代码示例:

                <div>
                    <i><a href="#" class="fa fa-code"></a></i>
                    <div>
                    <h4>Web Design</h4>
                    </div>
                </div>

我想要的是当用户点击这个服务图标时,它会将用户重定向到投资组合页面的网页设计过滤器。

我尝试了很多方法,例如将链接 portfolio.html?filter=webdesign 添加到服务图标的 a href 中,但没有奏效。

【问题讨论】:

  • 您好 Soso,欢迎来到 Stackoverflow。你试过什么了?您可以将过滤器作为 URL 查询参数传递,并使用基本的 Javascript 和 CSS 隐藏未定位的 div。
  • @Sumi Strassle 非常感谢您的欢迎。我刚刚尝试了许多与 html 编码相关的方法,比如 Tobias Boertz 使用的方法。如果可能的话,您能否通过编写 js 代码来阐明您的解决方案?抱歉,我没有太多关于 js 编码的背景。
  • 请记住 Stackoverflow 是一个知识共享平台。您应该遵循一些关于 Javascript 的教程,恕我直言。

标签: javascript html filter


【解决方案1】:

我认为你应该学习一些关于 HTML5、CSS 3 和 Javascript 的教程。

我在this codepen 做了一个基础版。请注意,我使用的是 IE 和其他旧版浏览器不支持的 URLSearchParams API。另外,我正在使用Ecmascript 6

算法是做什么的?

  1. 查看网址,是否有过滤参数(如http://.../somewhere?filter=wordpress
  2. 如果不是,什么都不做,展示一切,否则,
  3. 获取所有具有filter 类的内容
  4. 显示匹配的内容
  5. 隐藏其余部分。

算法的关键在于获取查询参数,然后就是循环遍历一个集合并改变styledisplay属性(见the documentation for the display attribute

// 1. get URL query param (does not work on IE, AFAIK)
const url = new URL(window.location.href)
const currentFilter = url.searchParams.get('filter')

// we only filter stuff if a filter is provided
if (currentFilter != null) {

  // 2. collect all filters
  const collection = document.getElementsByClassName('filter')

  // 3. traverse the collection, hide what's not of interest, show the rest
  for (let item of collection) {
    if (item.classList.contains(currentFilter)) {
      item.style.display = 'block'
      break
    }

    item.style.display = 'none'
  }
}

【讨论】:

    【解决方案2】:

    也许这对你有用。给你的 li 标签特定的 id:

    <ul class="portfolio-filters list-inline">
      <li class="filter active" data-filter="all" id="all-filter">All</li>
      <li class="filter" data-filter="webdesign" id="webdesign-filter">Web Design</li>
      <li class="filter" data-filter="responsive" id="responsive-filter">Responsive</li>
      <li class="filter" data-filter="wordpress" id="wordpress-filter">Wordpress</li>
    </ul>
    

    然后你可以直接链接到具体的id:

    <div>
      <i><a href="portfolio.html/#webdesign-filter" class="fa fa-code"></a></i>
      <div>
        <h4>Web Design</h4>
      </div>
    </div>
    

    否则我猜你将不得不使用 javascript。

    【讨论】:

    • 在多次尝试编写 html 代码之后,是的,我想它需要特定于 Javascript 的代码。非常感谢您的尝试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    相关资源
    最近更新 更多