【问题标题】:jQuery: If this HREF containsjQuery:如果这个 HREF 包含
【发布时间】:2011-06-16 15:46:06
【问题描述】:

为什么我不能让它工作??

$("a").each(function() {
    if ($(this[href$="?"]).length()) {
        alert("Contains questionmark");
    }
});

Ps.:这只是一个简化的例子,让您更容易获得概览。

【问题讨论】:

  • $("a").each(function() { console.debug($(this[href$="?"]);if ($(this[href$="?" ]).length()) { alert("包含问号"); } });

标签: javascript jquery


【解决方案1】:

您可以直接选择感兴趣的元素。

$('a[href*="?"]').each(function() {
    alert('Contains question mark');
});

http://jsfiddle.net/mattball/TzUN3/

请注意,您使用的是attribute-ends-with selector,上面的代码使用了attribute-contains selector,这听起来像是您的实际目标。

【讨论】:

  • @Matt - 请注意,在当前版本的 jQuery 中,要匹配的字符串需要引号。
  • @Ender 根据 API 文档,你是对的。实际上,引号并不总是必需的,尽管正如您所说,它们在这里是必需的。
  • @Ender 基本上是 jQuery 用来解析属性选择器的正则表达式允许使用引号 没有引号,但我认为这里没有引号是有问题的,因为 ? 可以在正则表达式中有特殊含义。查看jsfiddle.net/mattball/GYDQc
  • 非常酷。我想他们只是通过让文档说需要引号来确保安全。通过阅读源代码可以学到惊人的东西:)
  • 这个答案是纯金,尤其是j查询文章。
【解决方案2】:
$("a").each(function() {
    if (this.href.indexOf('?') != -1) {
        alert("Contains questionmark");
    }
});

【讨论】:

  • 只使用this.href 会更简单,而不是不必要地求助于jQuery。这也不是很正确,因为最初的问题似乎想找到一个“?”在“href”值的结束(这是可以理解的)。
  • @Pointy 我认为 OP 没有意识到他正在使用 attribute-ends-with 选择器。
  • @Matt Ball 我明白你为什么会这么说,但要找一个“?”在“href”的末尾可能是一件有用的事情。当然,您可能是正确的;寻找“?”也很有用。 任何地方在“href”中。这个问题不是很清楚。
  • 这对我来说非常适合:)
【解决方案3】:

使用这个

$("a").each(function () {
    var href=$(this).prop('href');
    if (href.indexOf('?') > -1) {
        alert("Contains questionmark");
    }
});

【讨论】:

    【解决方案4】:

    它不起作用,因为它在语法上毫无意义。你根本无法在 JavaScript 中那样做。

    但是,您可以使用 jQuery:

      if ($(this).is('[href$=?]'))
    

    你也可以只看“href”值:

      if (/\?$/.test(this.href))
    

    【讨论】:

    • 以上都没有给我一个警报,尽管里面有一个带问号的链接......
    【解决方案5】:

    与其他人提出的观点一样,$= 选择器是“ends with”选择器。您将需要 *= (contains) 选择器,如下所示:

    $('a').each(function() {
        if ($(this).is('[href*="?"')) {
            alert("Contains questionmark");
        }
    });
    

    Here's a live demo ->

    正如 Matt Ball 所说,除非您还需要操作不带问号的链接(可能是这种情况,因为您说您的示例已简化),否则只需选择你想开始的链接:

    $('a[href*="?"]').each(function() {
        alert("Contains questionmark");
    });
    

    【讨论】:

      【解决方案6】:

      试试这个:

      $("a").each(function() {
          if ($('[href$="?"]', this).length()) {
              alert("Contains questionmark");
          }
      });
      

      【讨论】:

      • 这行不通,因为它告诉 jQuery 在 ".each()" 上下文中寻找一个 <a> 标记,它是 <a>后代
      猜你喜欢
      • 2021-04-14
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 2013-10-27
      相关资源
      最近更新 更多