【问题标题】:How does one match an element in jQuery without needing to match case? [duplicate]如何在不需要匹配大小写的情况下匹配 jQuery 中的元素? [复制]
【发布时间】:2013-09-11 14:04:58
【问题描述】:

我有一个带有一些导航的页面,如果这是我们所在的页面,我会尝试突出显示链接。就像这样,它几乎可以很好地工作:

function highlightPageInNav() {
        // Get file name.
        var filename = window.location.href.substr(window.location.href.lastIndexOf("/") + 1);
        // Build selector.
        var attrSelector = "a[href='" + filename + "']";
        // Set class of li to "current".
        $("#nav ul li").has(attrSelector).addClass("current");
}

问题是我的导航中的锚点说,例如,“CreateUser.aspx”,但如果当前 URL 包含“createuser.aspx”,脚本将不匹配。

我尝试了其他几个想法,包括使用以下内容替换上面的部分脚本。我将文件名转换为 toLowerCase() 然后尝试将其与 href .toLowerCase() 匹配,这些警报向我展示了我的期望,但 $(this).addClass("current"); 实际上并没有做任何事情——我猜很可能是因为@ 987654324@ 不再适用于我要修改的元素。

$("#nav ul li a").each(function () {
    alert($(this).attr("href"));
    hrefLowerCase = $(this).attr("href").toLowerCase();
    alert(hrefLowerCase);
    if (filename == hrefLowerCase) {
        alert("found one!");
        $(this).addClass("current");  // This is where it stops doing what I desire.
    }
});

所以,如果有人能告诉我如何非常简单地使我的脚本同时匹配“CreateUser.aspx”和“createuser.aspx”,那将不胜感激!谢谢!

【问题讨论】:

  • 您可以尝试将 this 作为变量存储在每个循环中,然后调用该变量而不是“this”。
  • 试试这些。谢谢!我为此认真地搜索了一段时间,并没有看到这些问题已经存在。
  • 您是要将该类添加到<a> 标记还是<li> 标记
  • 试图将类添加到li。

标签: javascript jquery


【解决方案1】:

我已经稍微更正了 DGS 的答案以使其正常工作。

var filename = window.location.href.substr(window.location.href.lastIndexOf("/") + 1).toLowerCase();
$('#nav ul li a').each(function() {
    if ($(this).attr('href').toLowerCase() === filename) {
        $(this).parent().addClass('current');
    }
});

它应该将当前类添加到 li 标签,而不是 anchor

建议的其他方法是使用过滤器:

var filename = window.location.href.substr(window.location.href.lastIndexOf("/") + 1).toLowerCase();
$('#nav ul li a').filter(function() {
    return $(this).attr('href').toLowerCase() === filename;
}).parent().addClass('current');

【讨论】:

  • 就是这样!由于提出了这个问题,我知道了 jQuery 过滤器功能。谢谢,伙计们!
  • 顺便说一句,我认为按照您的意愿去做并不是最好的主意。这是因为例如,如果您的地址看起来像这样:CreateUser.aspx#CreateUser.aspx?c=1234,那么它将不匹配。最好检查一下你在服务器端的文件
  • 好电话。我试图减少对服务器端代码的依赖(这对我来说是一种学习),更多地依赖 JavaScript,所以我可以删除这些字符:filename = filename.substring(0, filename.indexOf("#")); 感谢您指出这一点!
  • 顺便说一句,请记住this.href$(this).attr('href') 不同
【解决方案2】:
var filename = window.location.href.substr(window.location.href.lastIndexOf("/") + 1);    
$('#nav ul li a').filter(function() {
    return this.href.toLowerCase() == filename;
}).addClass('current');

【讨论】:

  • 如果你想问我一个问题:我试图将你的想法和另一篇文章中的小提琴结合起来,但它似乎没有任何效果。 $("#nav ul li a[href]").filter(function () { return this.href.toLowerCase() == filename; }).parent().addClass("current");
猜你喜欢
  • 1970-01-01
  • 2023-03-26
  • 2016-07-03
  • 2015-01-04
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多