проверить, начинается ли имя класса элемента tr с определенного значения - PullRequest
1 голос
/ 21 декабря 2011

Я пытаюсь проверить, есть ли у элемента <tr> имя класса, которое начинается с определенного значения, выполнив:

$('tr[class^="value"]')

Но, похоже, это не работает. Как мне этого добиться?

Ответы [ 3 ]

1 голос
/ 21 декабря 2011

Ваш вопрос, по-видимому, в том, что у вас есть элемент tr и вы просто хотите проверить, есть ли у него класс, начинающийся с определенного значения, поэтому:

var value = 'whatever';
var re = new RegExp('(^|\\s)' + value);
if (re.test(tr.className)) {
  // tr has a class name starting with value
}

Или вы хотите выбрать все TR, у которых есть класс, начинающийся с определенного значения? Для этого вы можете использовать querySelectorAll, если ваши TR имеют только один класс:

var trs = document.querySelectorAll('tr[class^=' + value + ']');

Или простым javascript:

var el, els = document.getElementsByTagName('tr');
var re = new RegExp('(^|\\s)' + value);
var result = [];

for (var i=0, iLen=els.length; i++) {
    el = els[i];

    if (re.test(el.className)) {
        result.push(el);
    }
}
// do something with result array

результат - это массив совпадающих TR в порядке документа.

1 голос
/ 21 декабря 2011

ОБНОВЛЕНИЕ

$('tr').filter(function() {
    var classNames = this.className.split(/\s+/);
    for (var i=0; i < classNames.length; i++) {

        // check if the class starts with the value
        if (classNames[i].substr(0, 5) === "value") {
            return true;
        }

        // or you could use a regex
        if (/^value/.test(classNames[i])) {
            return true;
        }
    }
    return false;
}).each(...);

Почему бы вам не попробовать метод hasClass() ?

$('tr').hasClass('value');
0 голосов
/ 21 декабря 2011

Вы можете использовать предложение Христо в сочетании с пользовательскими выражениями jQuery, если вы будете использовать его интенсивно, но будьте осторожны, потому что я сделал тесты, и это может быть легко в 3-4 раза медленнее.

Пример:

$.expr[':'].classStarts = function(elem, index, match) {
    var classNames = elem.className.split(/\s+/);

    /* getting only the value passed inside the parentheses */
    var filter = match[0].match(/\(([^\(\)]+)\)/, '')[1];
    for (var i = -1, _len = classNames.length; ++i < _len; ) {

        if (classNames[i].substr(0, filter.length) === filter) {
            return true;
        }

    }
    return false;
};
// USING
$('div:classStarts(myClass)').css('color', 'red');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...