带有“OR”的 jQuery 属性选择器运营商可能吗?

发布于 2024-12-10 17:06:03 字数 313 浏览 0 评论 0原文

是否可以使用“OR”运算符或类似运算符重写以下选择器?

$("a[href$='avi'], a[href$='mov'], a[href$='mp4'], a[href$='m4v']")

理想的情况是这样的:

$("a[href$='avi|mov|mp4|m4v']") // incorrect

让我的键盘多走几英里。我有一个测试小提琴

Is it possible to re-write the following selector using an "OR" operator or similar?

$("a[href$='avi'], a[href$='mov'], a[href$='mp4'], a[href$='m4v']")

Ideally something like:

$("a[href$='avi|mov|mp4|m4v']") // incorrect

to get a few more miles out of my keyboard. I have a test fiddle.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

习ぎ惯性依靠 2024-12-17 17:06:03

不,CSS 没有这个(它位于属性选择器 区域)jQuery 也不会添加它(请参阅 “属性结尾为”文档)。

当然,如果您不介意无法匹配 | 字符,您可以给自己一个实用函数来执行此操作,模糊如下所示:

(function($) {
    $.attrEndsWith = attrEndsWith;
    function attrEndsWith(tag, attr, list) {
        return $(tag + "[" + attr + "$='" + list.split("|").join("'], " + tag + "[" + attr + "$='") + "']");
    }
})(jQuery);

并使用so:

$.attrEndsWith("a", "href", "avi|mov|mp4|m4v");

这还没有经过测试,但你明白了。

No, CSS doesn't have this (it would be in the attribute selectors area) nor does jQuery add it (see the "attribute ends with" docs).

You could, of course, give yourself a utility function to do it if you don't mind not being able to match the | character, something vaguely like this:

(function($) {
    $.attrEndsWith = attrEndsWith;
    function attrEndsWith(tag, attr, list) {
        return $(tag + "[" + attr + "$='" + list.split("|").join("'], " + tag + "[" + attr + "$='") + "']");
    }
})(jQuery);

and used so:

$.attrEndsWith("a", "href", "avi|mov|mp4|m4v");

This is untested, but you get the idea.

山川志 2024-12-17 17:06:03

您可以通过使用 James Padolseys 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"); 

You can do this by extending jQuery with James Padolseys Regex Selector for jQuery. Pretty useful when you want to put regex into your selectors.

Run this code in Test fiddle

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"); 
瞎闹 2024-12-17 17:06:03
$("a").filter(function(){ return /(avi|mov|mp4|m4v)$/i.test($(this).attr('href')); }).addClass('betterSelect');

这并不是您正在寻找的答案,但也许会有所帮助。

$("a").filter(function(){ return /(avi|mov|mp4|m4v)$/i.test($(this).attr('href')); }).addClass('betterSelect');

Not really the answer you were looking for, but maybe it will help.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文