我有以下jQuery选择:jQuery的属性选择:X = Y]或[X = Z]
$("a[href^='http://'],a[href^='https://']");
是否有可能改变这种做法,我并不需要指定a[href^=
两次?
例如,像:
$("a[href^='http://'||'https://']");
编辑:我的http
和https
例如不应从字面上理解。我可能会寻找以y
和z
开头的值。
我有以下jQuery选择:jQuery的属性选择:X = Y]或[X = Z]
$("a[href^='http://'],a[href^='https://']");
是否有可能改变这种做法,我并不需要指定a[href^=
两次?
例如,像:
$("a[href^='http://'||'https://']");
编辑:我的http
和https
例如不应从字面上理解。我可能会寻找以y
和z
开头的值。
,如果你愿意使用第二个函数调用非常简单:
$('a').filter('[href^="http://"],[href^="https://"]');
或者与令牌:
var startsWith = ['http://', 'https://'];
$('a').filter(function() {
var i;
for (i = 0; i < startsWith.length; i++) {
if ($(this).is('[href^="' + startsWith[i] + '"]')) {
return true;
}
}
return false;
});
或用自定义表达式:
$.expr[':'].hrefStartsWith = function (ele, i, info) {
var tokens;
tokens = info[3].split(',');
for (i = 0; i < tokens.length; i++) {
if ($(ele).is('[href^="' + tokens[i] + '"]')) {
return true;
}
}
return false;
};
哪将用作:
$('a:hrefStartsWith(http://,https://)')
“是否可以改变这个,以便我不需要指定'[href^='两次?我认为你没有仔细阅读这个问题 – 2012-08-09 16:27:20
@ngmiceli平心而论,这只会指定'[href^='两次,但是如果有一种方法可以做到这一点,而不需要指定任何两次。 +1,迄今为止的最佳答案。 – Curt 2012-08-09 16:28:26
小提琴:http://jsfiddle.net/X8CYQ/
你应该能够使用这样的事情:
$.expr[':'].exturl = function(obj) {
return (/^https?:\/\//i).test($(obj).attr("href"));
}
然后使用这样的选择:
$("a:exturl")
HTML:
<a href="http://www.google.com">External link #1</a><br />
<a href="ftp://www.donotinclude.dk">No match link #1</a><br />
<a href="?nope">No match link #2</a><br />
<a href="https://www.google.dk">External link #2</a><br />
<a href="http://www.google.se">External link #3</a><br />
<a href="ssh://whywouldyouevendothis">No match link #3</a><br />
<a href="https://www.google.co.uk">External link #4</a><br />
<a href="http://www.facebook.com">External link #5</a><br />
<a href="/index.html">No match link #4</a><br />
<a href="https://www.facebook.com">External link #6</a><br />
JS:
$.expr[':'].exturl = function(obj) {
return (/^https?:\/\//i).test($(obj).attr("href"));
}
$(document).ready(function() {
$("a:exturl").css("color", "red");
});
你可以简单地做
$("a[href^='http']")
由于href^=
仅仅表示 “开头” 除非你有一个需要被当然也包括://
。
这是与其他属性和值的示例:
请参阅我的问题的编辑部分http://stackoverflow.com/q/11887602/370103 – Curt 2012-08-09 16:29:08
将不适用于'How 404 works' – 2012-08-09 16:30:41
你不能在默认情况下做到这一点jQuery的..它没有任何形式的“或”条件选择(除了逗号之外,这是你想要避免的)。
,如果你想你可以创建一个自定义过滤器:
这是非常矫枉过正,除非你需要做这种事情很多。该示例也只适用于完全匹配。你将不得不调整一个“开始”或其他类型的比赛,但这个想法就在那里。
也许http://stackoverflow.com/questions/190253/jquery-selector-regular-expressions是答案。 – Barmar 2012-08-09 16:27:15