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