2016-07-01 2 views
0

Каков наилучший способ получить класс элемента по префиксу?Как получить класс элемента с помощью префикса через jQuery

Например, у меня есть:

<div class="cc-colour-red cc-size-big cc-width-narrow"> 

Как получить эти отдельно - цвет, того размера и ширина?

Надеюсь, это имеет смысл.

У меня есть элемент DOM. Конечным результатом будет «большой», «красный» и «узкий».

Спасибо!

+3

Лучшим способом было бы не использовать классы для этого.Вместо этого используйте индивидуальные атрибуты 'data- *' для каждого свойства. Можете ли вы изменить формат HTML? –

+0

Я знаю, но это невозможно в этом конкретном случае. – Spiro

+0

Что вам нужно? Значения CSS 'color',' font-size' и 'width'? – Arg0n

ответ

1

Попробуйте this:

JavaScript

$("div").each(function(index, elem){ 
    var classes = $(elem).attr("class"); 
    var color = classes.replace(/.*cc-colour-([^\s]+).*/g, "$1"); 
    var size = classes.replace(/.*cc-size-([^\s]+).*/g, "$1"); 
    var width = classes.replace(/.*cc-width-([^\s]+).*/g, "$1"); 
    console.log(color, size, width); //red big narrow, blue small wide, green medium narrow 
}); 

HTML

<div class="cc-colour-red cc-size-big cc-width-narrow"> 
<div class="cc-colour-blue cc-size-small cc-width-wide"> 
<div class="cc-colour-green cc-size-medium cc-width-narrow"> 
0

Используйте следующие

$("div").prop("classList").forEach(function(entry) { 
    console.log(entry.split('-')[2]); 
}); 
+0

Первое описание привело к тому, что это понравилось. теперь, в комментариях, он объяснил это более подробно. – Apostolos

+0

Извините, я должен был уточнить. Я считаю, что теперь это имеет смысл в первом посте. – Spiro

+0

@Spiro, пожалуйста, см. Мой обновленный ответ. – Apostolos

2

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

^= 

Если вы используете несколько классов CSS, есть другой селектор для 'содержит':

*= 

Пример:

$("[class^='cc-size-']") 
+0

Это половина ответа в лучшем случае. Как вы получаете ключ/значения из классов? –

+0

Я должен уточнить. У меня выбран элемент DOM, я хочу получить эти значения «большой», «красный» с помощью префиксов «цвет», «ширина» и т. Д. Из классов элемента. – Spiro

+0

Хорошо, понял. Посмотрите на ответ @RoryMcCrossan, я думаю, что это лучше всего –

2

Вы можете использовать document.querySelector() с селектором "[class|=cc]", .className, .replace() с RegExp/cc-|\s/g исключить префикс замены строки. В качестве альтернативы вы можете использовать .match() возвращает массив значений

var values = document.querySelector("[class|=cc]") 
 
      .className.replace(/cc-|\s/g," "); 
 
console.log(values);
<div class="cc-colour-red cc-size-big cc-width-narrow"> 
 
</div>

+0

Спасибо, я люблю его – super11

2

Лучший способ достичь этого - не использовать классы вообще, а вместо этого использовать индивидуальные атрибуты data-* для каждого свойства.

Если вы не можете изменить HTML, вы можете достичь того, что вам нужно, создав массив объектов, содержащий пары ключ/значение. Затем можно использовать индекс элемента, чтобы связать его с пар ключ/значение объекта:

var arr = $('div').map(function() { 
    var obj = {}; 
    for (var i = 0; i < this.classList.length; i++) { 
     var className = this.classList[i]; 
     var matches = /^cc-(.+)-(.+)$/.exec(className); 
     obj[matches[1]] = matches[2]; 
    } 
    return obj; 
}).get(); 

Пример вывода:

Working example

Этот подход имеет преимущество быть полностью расширяемый; если вы добавите другие классы, тогда код будет автоматически работать без изменений.

+0

'div' в OP не имеет' id', выиграл Это проблема? – Arg0n

+0

Хорошее обходное решение, но я настоятельно рекомендую использовать значения данных тоже –

+0

@ToniMichelCaubet Я согласен, как я уже говорил в первом абзаце. Я могу только предположить, что OP предоставляется HTML из внешнего источника или использует это как учебное упражнение. –

Смежные вопросы