Получить имя класса, зная часть его имени, когда это не единственный класс, примененный к элементу - PullRequest
2 голосов
/ 15 сентября 2009

Я ищу способ использования jquery / javascript для получения имени класса, когда я знаю только его часть, и к этому элементу применено более одного класса.

Поэтому, если я ищу класс, который, как я знаю, начинается с "charLimit_", я хочу знать это полное имя класса, даже если это не единственный класс, применяемый к данному элементу. Пример HTML будет.

<input class="charLimit_30 lastNameValidation" type="text" />

То, что у меня есть ниже, поместит и charLimit_30, и lastNameValidation в массив, но как я тогда скажу, что я хочу только charLimit_30, а затем сообщу только значение, найденное после подчеркивания (30).

var classMName = $('[class*=charLimit_]').attr("class").split(' ');

Заранее спасибо за помощь !!!

Ответы [ 4 ]

2 голосов
/ 15 сентября 2009

Если вам нужно только первое вхождение и все, что следует за подчеркиванием в классе, это число, то примерно так это будет делать:

$('[class*=charLimit_]').attr("class").match(/(?:\s|^)charLimit_(\d+)/)[1];
2 голосов
/ 15 сентября 2009

Это похоже на то, что сказал inkedmn, но более jQuery-ишем:

var numbersAfterCharLimit = [];

$('[class*="charLimit_"]').each(function() {
    var matches;
    if (matches = this.className.match(/(?:\s+|^)charLimit_([0-9]+)(?:\s+|$)/)) {
        numbersAfterCharLimit.push(parseInt(matches[1], 10));
    }
});
1 голос
/ 18 сентября 2009

Похоже, что это работает (по крайней мере, на стеке потока):

var test = $('[class*=owner]').attr('class').split(' ');
for(i in test){
    if(test[i].indexOf('post-sign') !== false){
        test = test[i].split('-');
        // replace this with a return
        console.log(test[1]);
        break;
    }
}

И тот, который будет работать с кодом, с которым он пытается это сделать:

var test = $('[class*=charLimit_]').attr('class').split(' ');
for(i in test){
    if(test[i].indexOf('charLimit_') !== false){
        test = test[i].split('_');
        // replace this with a return if it is in a function
        console.log(test[1]);
        break;
    }
}
0 голосов
/ 15 сентября 2009
var classes = $('input').attr('class');
var myNum = '';
for(var i=0;i<classes.length;i++){
    if(classes[i].match(/^charLimit_.*$/){
        myNum = classes[i].split('_')[1];
    }
}

Нечто подобное может сработать, если, конечно, нет какого-то волшебного способа сделать это в jQuery, о котором я просто не подозреваю:)

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