jQuery属性选择器:或

我有以下jQuery选择器:

$("a[href^='http://'],a[href^='https://']"); 

是否可以更改此设置,以便我不需要指定a[href^=两次?

例如,类似于:

 $("a[href^='http://'||'https://']"); 

编辑:我的httphttps例子不应该按字面意思。 我可以寻找以yz开头的值。

如果您愿意使用第二个函数调用,这很简单:

 $('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://)') 

小提琴 : http : //jsfiddle.net/X8CYQ/


你应该可以使用这样的东西:

 $.expr[':'].exturl = function(obj) { return (/^https?:\/\//i).test($(obj).attr("href")); } 

然后像这样使用选择器:

 $("a:exturl") 

HTML

 External link #1
No match link #1
No match link #2
External link #2
External link #3
No match link #3
External link #4
External link #5
No match link #4
External link #6

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://jsbin.com/owehow/2/edit

默认情况下,您无法在jQuery中执行此操作。它对选择器没有任何“或”条件(逗号除外,排序,这是您要避免的)。

如果您愿意,可以创建自定义filter:

http://jsfiddle.net/yJZDg/

除非你需要做很多这样的事情,否则这是非常矫枉过正的。 该示例也仅适用于完全匹配。 你必须调整“开始时”或其他类型的匹配,但这个想法就在那里。