【发布时间】:2017-11-06 14:18:07
【问题描述】:
使用列表进行导航,如果页面 URL(减去路径后的任何内容)与列表项的 href(减去路径)。
例子:
<li><a href="/p/clothing/dresses/N-10635?ab=leftNav:dresses">dresses</a></li>
当页面 URL 包含 href 的 /p/clothing/dresses/N-10635 部分时,将类“selected”应用于列表项。
到目前为止,我使用以下方法取得了部分结果:
$('.leftNav li a').each(function(){
if(window.location.href == this.href){
$(this).parents('li').addClass('selected');
}
});
<ul class="leftNav">
<li><a href="/p/clothing/dresses/N-10635?ab=leftNav:dresses">dresses</a></li>
<li><a href="/p/clothing/bottoms/capris/N-10764?ab=leftNav:capris">capris</a></li>
</ul>
然而,只有在 URL 与 href 完全匹配时才应用 'selected' 类 - 这意味着它必须在 href 中包含链接跟踪变量(即:?ab=leftNav:dresses) .考虑匹配“基本”URL 和 href 的方法,我尝试向列表项添加数据属性以仅匹配路径:
$('.leftNav li').each(function(){
if(window.location.href == (this).data('left-nav-href')){
$(this).addClass('selected');
}
});
<ul class="leftNav">
<li data-left-nav-href="/p/clothing/dresses/N-10635"><a href="/p/clothing/dresses/N-10635?ab=leftNav:dresses">dresses</a></li>
<li data-left-nav-href="/p/clothing/bottoms/capris/N-10764"><a href="/p/clothing/bottoms/capris/N-10764?ab=leftNav:capris">capris</a></li>
</ul>
我尝试使用 window.location 的变体进行此操作,包括:window.location.href、window.location.href.pathname、window.location.href.indexOf、window.location.href.startsWith。由于这不起作用,我搜索了一种方法来匹配 URL 和 href 的路径,而不管其他参数或变量如何,但我能找到的只是匹配 URL 和 href 的具体方法 with 字符串或参数.我能找到的仅匹配 URL 或 href 的一部分的所有实例都使用“拆分”正则表达式,这引入了我认为我的使用不需要的另一个级别的复杂性。我错过了一个更简单的解决方案吗?
【问题讨论】:
-
请解释否决票以帮助我们改进。谢谢。
-
这里也一样 .. 有人否决了我的答案 我不知道为什么 .. 不管 ..@paulmz 我用示例更新了我的代码 .. 检查它
-
Mohamed-Yousef 和 Vinas 的答案似乎都能正常工作。在标记正确答案之前,我将与他们一起工作一天。谢谢!
-
我仍在测试 Mohamed-Yousef 和 Vinas 的答案。我没有看到使用这两个版本的任何负面影响。由于性能和输出看起来相同,我倾向于 Vinas 的答案只是因为它少了一行代码。但是,如果有人能描述为什么一个版本可能比另一个版本更有益,那么在标记正确答案之前,我愿意接受建议。
标签: javascript jquery html url href