Взываю к гуру jQ :)
Есть блок, выводящий результаты голосования, которые закидываются в span .poll__result. В общем, есть такой код, который надо модифицировать (добавить id, for, отрисовать результат голосования типа полосы):
<div class="poll__answers">
<div class="poll__input">
<input class="radio" name="radio" type="radio">
<label>Да</label>
<span class="poll__result">68%</span>
<div class="poll__bar"><div></div></div>
</div>
<div class="poll__input">
<input class="radio" name="radio" type="radio">
<label for="input">Нет</label>
<span class="poll__result">9%</span>
<div class="poll__bar"><div></div></div>
</div>
<div class="poll__input">
<input class="radio" name="radio" type="radio">
<label for="input">Не знаю/Затрудняюсь ответить</label>
<span class="poll__result">23%</span>
<div class="poll__bar"><div></div></div>
</div>
</div>
Я задачу решил, но как мне кажется, не очень изящно что ли, думаю, можно код написать более красиво и качественно, вот сам код:
function poll() {
var results = [];
$('.poll__result').each(function(indx, e){
results.push($(e).text()); // собираем все значения голосов по каждому пункту
})
$('.poll__bar > div').each(function(indx, e){
$(e).attr('style','width:'+results[indx]); // отрисовываем полоску %
})
$('.poll__input > input').each(function(indx, e){
$(e).attr('id','radio_' + (indx + 1)); // присваиваем каждому input="radio" id
})
$('.poll__input > label').each(function(indx, e){
$(e).attr('for','radio_' + (indx + 1)); // присваиваем каждому label соответствующий id
})
}
Вот как-то так. Собственно спрашиваю в целях самообразования. Оно хоть и работает как надо, но, мне кажется, что как-то грубовато.
P.S. Я знаю, что вообще все эти манипуляции должны производиться на сервере и отдаваться в тело html уже готовыми. Повторюсь, что такую задачу я себе поставил и пытаюсь сделать решение красивее :) Спасибо за внимание.