我有以下jQuery选择器:
$("a[href^='http://'],a[href^='https://']");
是否可以更改此设置,以便我不需要指定a[href^=
两次?
例如:
$("a[href^='http://'||'https://']");
编辑:我的http
和https
示例不应按字面意思理解。我可能正在寻找以y
和z
开头的值。
答案 0 :(得分:2)
如果您愿意使用第二个函数调用,则非常简单:
$('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://)')
答案 1 :(得分:0)
小提琴: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");
});
答案 2 :(得分:0)
你可以简单地做
$("a[href^='http']")
由于href^=
仅表示“以...开头”,除非您需要确保包含://
。
以下是其他属性和值的示例:
答案 3 :(得分:0)
默认情况下你不能在jQuery中执行此操作..它没有任何选择器的“或”条件(逗号除外,排序,这是你想要避免的)。
如果您愿意,可以创建自定义过滤器:
除非你需要做很多这样的事情,否则这是非常矫枉过正的。该示例也仅适用于完全匹配。你必须调整“开始时”或其他类型的匹配,但这个想法就在那里。