Reputation: 5598
Why can't I get this to work??
$("a").each(function() {
if ($(this[href$="?"]).length()) {
alert("Contains questionmark");
}
});
Ps.: This is just at simplifyed example, to make it easier for you to get an overview.
Upvotes: 53
Views: 136691
Reputation: 359776
You could just outright select the elements of interest.
$('a[href*="?"]').each(function() {
alert('Contains question mark');
});
http://jsfiddle.net/mattball/TzUN3/
Note that you were using the attribute-ends-with
selector, the above code uses the attribute-contains
selector, which is what it sounds like you're actually aiming for.
Upvotes: 115
Reputation: 7953
$("a").each(function() {
if (this.href.indexOf('?') != -1) {
alert("Contains questionmark");
}
});
Upvotes: 23
Reputation: 15221
Along with the points made by others, the $=
selector is the "ends with" selector. You will want the *=
(contains) selector, like so:
$('a').each(function() {
if ($(this).is('[href*="?"')) {
alert("Contains questionmark");
}
});
As noted by Matt Ball, unless you will need to also manipulate links without a question mark (which may be the case, since you say your example is simplified), it would be less code and much faster to simply select only the links you want to begin with:
$('a[href*="?"]').each(function() {
alert("Contains questionmark");
});
Upvotes: 2
Reputation: 3883
use this
$("a").each(function () {
var href=$(this).prop('href');
if (href.indexOf('?') > -1) {
alert("Contains questionmark");
}
});
Upvotes: 4
Reputation: 413702
It doesn't work because it's syntactically nonsensical. You simply can't do that in JavaScript like that.
You can, however, use jQuery:
if ($(this).is('[href$=?]'))
You can also just look at the "href" value:
if (/\?$/.test(this.href))
Upvotes: 3
Reputation: 8966
Try this:
$("a").each(function() {
if ($('[href$="?"]', this).length()) {
alert("Contains questionmark");
}
});
Upvotes: 0