Селектор атрибутов jQuery с оператором «ИЛИ» возможен? - PullRequest
2 голосов
/ 17 октября 2011

Можно ли переписать следующий селектор, используя оператор «ИЛИ» или аналогичный?

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

В идеале что-то вроде:

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

, чтобы получить еще несколько мильиз моей клавиатуры.У меня есть тестовая скрипка .

Ответы [ 3 ]

3 голосов
/ 17 октября 2011

Нет, у CSS этого нет (это будет в селекторах атрибутов ), и jQuery не добавляет его (см. Атрибут ", оканчивающийся на" 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");

Это не проверено, но вы поняли идею.

2 голосов
/ 17 октября 2011

Вы можете сделать это, расширив jQuery с помощью James Padolseys Regex Selector для 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"); 
1 голос
/ 17 октября 2011
$("a").filter(function(){ return /(avi|mov|mp4|m4v)$/i.test($(this).attr('href')); }).addClass('betterSelect');

Не совсем тот ответ, который вы искали, но, возможно, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...