jQuery - применить класс к элементу с наибольшим номером
У меня есть следующая структура:
<div class="num1">4,8</div>
<div class="num11">2,37</div>
<div class="num2">3,5</div>
<div class="num21">1,85</div>
<div class="num3">5,7</div>
<div class="num31">2,8</div>
etc...
Теперь, что я хотел бы сделать, это добавить дополнительный класс к divs numX и numX1, где X - это номер, где div имеет наибольшее значение.
Итак, numX должны быть протестированы, и я сделал это: jsfiddleCode, но теперь я не могу понять, как применить этот дополнительный класс к div-элементам, которые соответствуют моему выбору. В приведенном выше примере мне нужно было бы добавить класс к классам div num3 и num31, так как div с классом num3 имеет наибольшее значение (5,7).
В коде jsfiddle вы увидите, что я использую плагин jquery для расчета, который также вызывает проблемы с запятыми (,).
Любая помощь приветствуется!
edit: Большое спасибо Louskan, я просто расскажу здесь решение на случай, если jsfiddle исчезнет или что-то в этом роде:
var maxClass='';
var max=0;
$("div[class^='num']").filter(function(){
return /^num\d$/.test($(this).attr("class"));
}).each(function() {
var val = $(this).html();
val = val.replace(",",".");
if (val > max) {
max = val;
maxClass = $(this).attr('class');
}
});
$("div[class^="+maxClass+"]").css('border', '1px red solid');
Еще раз спасибо!
2 ответа
Вот некоторый код: http://jsfiddle.net/sQLu7/11/
Вы можете заменить границу css на addClass. Надеюсь, это поможет, ваша проблема была в том, что ваша переменная t вернула только первый элемент.
Отредактируйте oh, и я на самом деле получаю только подэлементы, то есть, если 31 является самым высоким, тогда 3 не будет получено. Ну, вы можете настроить код по своему усмотрению.
var num = 0;
var class;
$("div[class^='num']").each(function(){
var float = parseFloat($(this).html().replace(',','.'));
if (float > num) {
num = float;
class = $(this).attr('class');
};
});
//$( '.' + class ).css('color', '#ff0000');
$( '.' + class ).addClass('selected');