Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите сократить код (https://javascript.ru/forum/misc/15130-pomogite-sokratit-kod.html)

Diego 14.02.2011 17:56

Помогите сократить код
 
Была цель - написать скрипт под uCoz. В общем не буду вдаваться в подробности - главное что работает. Но проблема в другом. Он относительно большой:
var div = document.getElementsByClassName('answer')
var num1 = parseFloat(div[0].getElementsByTagName('span')[0].getAttribute('title').substr(9))
var num2 = parseFloat(div[1].getElementsByTagName('span')[0].getAttribute('title').substr(9))
var num3 = parseFloat(div[2].getElementsByTagName('span')[0].getAttribute('title').substr(9))
var num4 = parseFloat(div[3].getElementsByTagName('span')[0].getAttribute('title').substr(9))
var num5 = parseFloat(div[4].getElementsByTagName('span')[0].getAttribute('title').substr(9))
var num6 = parseFloat(div[5].getElementsByTagName('span')[0].getAttribute('title').substr(9))
var num7 = parseFloat(div[6].getElementsByTagName('span')[0].getAttribute('title').substr(9))
var num8 = parseFloat(div[7].getElementsByTagName('span')[0].getAttribute('title').substr(9))
var num9 = parseFloat(div[8].getElementsByTagName('span')[0].getAttribute('title').substr(9))
var num10 = parseFloat(div[9].getElementsByTagName('span')[0].getAttribute('title').substr(9))

var mark1 = parseFloat(div[0].getElementsByTagName('span')[0].innerHTML)
var mark2 = parseFloat(div[1].getElementsByTagName('span')[0].innerHTML)
var mark3 = parseFloat(div[2].getElementsByTagName('span')[0].innerHTML)
var mark4 = parseFloat(div[3].getElementsByTagName('span')[0].innerHTML)
var mark5 = parseFloat(div[4].getElementsByTagName('span')[0].innerHTML)
var mark6 = parseFloat(div[5].getElementsByTagName('span')[0].innerHTML)
var mark7 = parseFloat(div[6].getElementsByTagName('span')[0].innerHTML)
var mark8 = parseFloat(div[7].getElementsByTagName('span')[0].innerHTML)
var mark9 = parseFloat(div[8].getElementsByTagName('span')[0].innerHTML)
var mark10 = parseFloat(div[9].getElementsByTagName('span')[0].innerHTML)
var v = parseFloat(document.getElementById('v').innerHTML)
var nv = v/10
alert(Math.ceil(((mark1*num1)+(mark2*num2)+(mark3*num3)+(mark4*num4)+(mark5*num5)+(mark6*num6)+(mark7*num7)+(mark8*num8)+(mark9*num9)+(mark10*num10))/nv)/10)

Вопрос вот в чем: как заменить 20 почти одинаковых строк кодом по меньше? Сам еще новичек, многого не знаю :)

B@rmaley.e><e 14.02.2011 17:58

Циклы же.

Diego 14.02.2011 19:13

Спасибо, попробовал... кое что получилось, но с проблемами:
div = document.getElementsByClassName('answer')
for (var i = 0; i < 10; i++) {  
alert(parseFloat(div[i].getElementsByTagName('span')[0].getAttribute('title').substr(9)))
 }

так работает, но присвоить отдельно каждое выражение отдельной переменной не получается:
div = document.getElementsByClassName('answer')
for (var i = 0; i < 10; i++) {   
num'i' = parseFloat(div[i].getElementsByTagName('span')[0].getAttribute('title').substr(9))
 }
alert(num1)

уже минут 20 ищу на разных сайтах, в том числе и тут, но нигде не написано о... грубо говоря "пристыковке", в общем вы поняли. Можете указать на ошибку? В любом случае спасибо за помощь.

B@rmaley.e><e 14.02.2011 19:35

Цитата:

Сообщение от Diego
num'i'

Что за бред? Есть же массивы.

Diego 14.02.2011 20:01

Хм... теперь всё ясно. Еще раз спасибо!


Часовой пояс GMT +3, время: 04:06.