【问题标题】:How do I use jQuery to ignore case when selecting?选择时如何使用jQuery忽略大小写?
【发布时间】:2009-03-06 17:05:49
【问题描述】:

我目前正在尝试使用以下 jQuery 选择器禁用链接:

$("a[href$=/sites/abcd/sectors]").removeAttr("href");

问题是有时页面上的 href 可能并不总是小写。发生这种情况时,选择器不再匹配。

有谁知道如何解决这个问题?我可以更改此行为以忽略大小写吗?

【问题讨论】:

  • 您使用的是最新版本的 jQuery 吗?因为我刚刚在具有大写 HREF 和小写 href 的页面上使用 1.3.2 测试了 FF 中的选择器,并且每次都匹配。你在哪个浏览器上遇到这个问题?
  • 带有 IE 7 的 jQuery 1.3.2 - 只是仔细检查过,问题仍然存在。
  • @cdmckay:我认为 OP 意味着 URL 可能并不总是小写。

标签: jquery css-selectors case-sensitive


【解决方案1】:

我自己也遇到过这个。我稍微切换了逻辑以允许我在没有大小写的情况下进行比较。它需要更多的工作,但至少它有效。

$('a').each(function(i,n) {
    var href = $(n).attr("href");
    href = href.toLowerCase();
    if (href.endsWith('/sites/abcd/sectors'))
        $(n).removeAttr('href');
});

您必须弄清楚自己的 endsWith 逻辑。

【讨论】:

  • 谢谢,效果很好。我为endsWith 使用了一个正则表达式。顺便说一句,toLower() 应该是 toLowerCase()。
  • 啊,谢谢。我是凭记忆做到的,忘记了一大块。我已经更新了。
【解决方案2】:

jQuery 是为扩展而构建的。您可以更正它或添加您自己类型的不区分大小写的选择器。

Rick Strahl: Using jQuery to search Content and creating custom Selector Filters

【讨论】:

    【解决方案3】:

    您可以在 jQuery 中使用函数“is”。它不区分大小写。

       $("a").each(function() {
         if ($(this).is("a[href$=/sites/abcd/sectors]")) {
           $(this).removeAttr('href');
         }
       })
    

    【讨论】:

      【解决方案4】:

      首先这是 NOT VALID 表达式,因为它包含 \

      如果您希望使用任何元字符(例如!"#$%&'()*+,./:;<=>?@[\]^``{|}~)作为

      名称的文字部分,您必须使用两个反斜杠转义该字符:\\

      源:http://api.jquery.com/category/selectors/

      所以你必须将/ 转义为\\/

      所以你的表达将是$("a[href$=\\/sites\\/abcd\\/sectors]").removeAttr("href");

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多