是否可以使用“OR”运算符或类似函数重写以下选择器?
$("a[href$='avi'], a[href$='mov'], a[href$='mp4'], a[href$='m4v']")
理想情况如下:
$("a[href$='avi|mov|mp4|m4v']") // incorrect
从键盘上多走几英里。我有test fiddle。
答案 0 :(得分:3)
不,CSS没有这个(它会在attribute selectors区域),jQuery也没有添加它(参见"attribute ends with" docs)。
当然,如果你不介意不能匹配|
字符,那么你可以给自己一个实用功能:模糊这样:
(function($) {
$.attrEndsWith = attrEndsWith;
function attrEndsWith(tag, attr, list) {
return $(tag + "[" + attr + "$='" + list.split("|").join("'], " + tag + "[" + attr + "$='") + "']");
}
})(jQuery);
并使用了:
$.attrEndsWith("a", "href", "avi|mov|mp4|m4v");
这是未经测试的,但你明白了。
答案 1 :(得分:2)
您可以通过使用James Padolseys Regex Selector for jQuery扩展jQuery来实现此目的。当你想把正则表达式放入你的选择器时非常有用。
jQuery.expr[':'].regex = function(elem, index, match) {
var matchParams = match[3].split(','),
validLabels = /^(data|css):/,
attr = {
method: matchParams[0].match(validLabels) ?
matchParams[0].split(':')[0] : 'attr',
property: matchParams.shift().replace(validLabels,'')
},
regexFlags = 'ig',
regex = new RegExp(matchParams.join('').replace(/^\s+|\s+$/g,''), regexFlags);
return regex.test(jQuery(elem)[attr.method](attr.property));
}
$("a[href$='avi'], a[href$='mov'], a[href$='mp4'], a[href$='m4v']")
.addClass("select");
$('a:regex(href,avi|mov|mp4|m4v)').addClass("betterSelect");
答案 2 :(得分:1)
$("a").filter(function(){ return /(avi|mov|mp4|m4v)$/i.test($(this).attr('href')); }).addClass('betterSelect');
不是你想要的答案,但也许会有所帮助。