Javascript 如何在不需要匹配大小写的情况下匹配jQuery中的元素?

Javascript 如何在不需要匹配大小写的情况下匹配jQuery中的元素?,javascript,jquery,Javascript,Jquery,我有一个带有一些导航的页面,我试图突出显示链接,如果这是我们所在的页面。它几乎可以很好地工作,就像这样: function highlightPageInNav() { // Get file name. var filename = window.location.href.substr(window.location.href.lastIndexOf("/") + 1); // Build selector. var attrS

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

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(“当前”)
实际上什么都不做——我想很可能是因为
$(这个)
不再适用于我试图修改的元素

$("#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”,那将非常感谢!谢谢

我已经对DGS的答案做了一点修改,使之生效

var filename = window.location.href.substr(window.location.href.lastIndexOf("/") + 1);    
$('#nav ul li a').filter(function() {
    return this.href.toLowerCase() == filename;
}).addClass('current');
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');
    }
});
它应该将class current添加到li标记,而不是锚定

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

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');

在这里,您可以尝试在每个循环中将其存储为变量,然后调用此变量而不是“this”。尝试这些。谢谢我认真地搜索了一会儿,没有发现这些问题已经存在。你是想把这个类添加到
标签中还是想把这个类添加到
  • 标签中。如果你允许我问一个问题:我试图把你的想法和另一篇文章中的一把小提琴结合起来,但它似乎没有任何效果$(“#nav ul li a[href]”).filter(函数(){返回this.href.toLowerCase()==filename;}).parent().addClass(“当前”);就是这样!通过问这个问题,我了解了jQuery过滤器函数。谢谢,伙计们!顺便说一句,我不认为这是最好的主意,做你想做的事。这是因为,例如,如果您的地址如下所示:
    CreateUser.aspx#
    ,或
    CreateUser.aspx?c=1234
    ,则它将不匹配。最好检查服务器端调用中的文件。我试图减少对服务器端代码的依赖(这对我来说是一件学习的事情),而更多地依赖JavaScript,因此我可以删除这些字符:
    filename=filename.substring(0,filename.indexOf(“#”)谢谢你指出这一点!顺便说一句,记住
    this.href
    $(this.attr('href')