jQuery:如果此HREF包含什么

53

为什么我无法让这个工作??

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

顺便提一句:这只是一个简化的例子,让你更容易地了解它。


$("a").each(function() { console.debug($(this[href$="?"]); if ($(this[href$="?"]).length()) { alert("包含问号"); } }); - MLS
6个回答

114

@Matt - 注意,在当前版本的jQuery中,需要在要匹配的字符串周围加上引号。 - Ender
1
@Ender 根据 API 文档,你是正确的。实际上,引号并不总是必要的,尽管正如你所说,它们在这里是必要的。 - Matt Ball
@Ender 基本上,jQuery 用于解析属性选择器的正则表达式允许使用引号或不使用引号,但我认为在这里不使用引号可能会有问题,因为 ? 在正则表达式中可能具有特殊含义。请查看 http://jsfiddle.net/mattball/GYDQc/。 - Matt Ball
非常酷。我猜他们只是为了安全起见,让文档说引号是必需的。通过阅读源代码,你可以学到很多惊人的东西 :) - Ender
这个答案非常珍贵,特别是 jQuery 文章。 - Greconomist

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

1
只使用this.href而不使用不必要的jQuery会更简单。这也不完全正确,因为原始问题似乎想要找到"href"值的结尾处的"?"(这是可以理解的)。 - Pointy
1
@Pointy 我认为 OP 没有意识到他正在使用属性结尾选择器。 - Matt Ball
1
@Matt Ball,我理解你为什么这么说,但在“href”末尾寻找“?”可能是一个有用的事情。当然,你也可能是正确的;在“href”中任何地方寻找“?”也是有用的。问题并不是非常清楚。 - Pointy
这对我完美地起作用了 :) - mjcoder

4

使用这个

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

3

它无法正常工作,因为语法上没有意义。在JavaScript中不能这样做。

但是,您可以使用jQuery:

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

您可以仅查看“href”值:
  if (/\?$/.test(this.href))

以上的代码都没有弹出提示,即使有一个带问号的链接... - curly_brackets

2
除了其他人提出的观点外,$=选择器是“以...结尾”选择器。你需要使用*= (包含)选择器,像这样:
$('a').each(function() {
    if ($(this).is('[href*="?"')) {
        alert("Contains questionmark");
    }
});

点击此处查看演示 ->

如Matt Ball所指出的,除非你需要同时操作没有问号的链接(因为你说的例子很简单),否则选择仅想要的链接会更少编码、更快速:

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

0

试试这个:

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

这样做是行不通的,因为它告诉jQuery在“.each()”上下文中查找一个后代<a>标签。 - Pointy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接