Помогите оптимизировать скрипт
Доброго времени суток,
с прошедшим праздником Вас. Я знаю, что не вежливо просить кого то сделать работу за тебя, но я и не прошу написать за меня скрипт. Если у Вас есть минутка посмотрите пожалуйста и посоветуйте можно ли произвести оптимизацию (если можно). К делу, имеется структура вида: ...<body> <div id="container" class="bloc"> <div class="group"> <! -- ... --> <div class="data"><div class="wrapper"> <div class="label">SOME DATA</div> <div class="label">SOME DATA</div> <div class="value">VALUE</div> <div class="label">SOME DATA</div> <div class="value">VALUE</div> <div class="label">SOME DATA</div> <div class="value">VALUE</div> <! -- итд связки блоков label + value --> </div></div> <div class="object"> <div class="id"><b>ID: SOME DATA</b></div> </div> <div class="object"> <div class="id"><b>ID: SOME DATA</b></div> </div> <div class="object"> <div class="id"><b>ID: SOME DATA</b></div> </div> <! -- итд множество блоков object --> </div> <! -- итд множество блоков group --> </body> Требуется для каждой группы взять элементы value из блока data и скопировать их 6 первых object данной группы. Вот мой скрипт, выполняется по OnDOMReady (взятый с этого сайта и слегка модифицированный - обернутый в замыкание): Event.OnDOMReady(function() { var groups = GetElements.byClass('group', d.getElementById('container'), 'div'); for (var i = 0; i < groups.length; i++) { for(var childItem in groups[i].childNodes) { if((groups[i].childNodes[childItem].nodeType == 1) && (groups[i].childNodes[childItem].className == "data")) { var values = GetElements.byClass('value', groups[i].childNodes[childItem], 'div'); break; } } var obj = GetElements.byClass('object', groups[i], 'div'); for (var j = 0; (j < obj.length) && (j < 6); j++) { addClass(obj [j], "_" + (j + 1)); for (var k = 0; k < values.length; k++) { obj [j].appendChild(values[k].cloneNode(true)); } } // END for } // END for }) Метод addClass взят из 10 лучших функций, метод byClass от туда же но легка модифицирован (на основании комментариев и аналогов найденных на просторах паутины): GetElements = (function() { return { byClass: function(pClassList, pNode, pTag){ var node = pNode || d; if(d.querySelectorAll) { return node.querySelectorAll("." + pClassList); } else if(d.getElementsByClassName) { return node.getElementsByClassName(pClassList); } else { var tag = pTag || "*", elements = node.getElementsByTagName(tag), classArray = pClassList.split(/\s+/), index = elements.length, result = []; while(index--) { if(elements[index].className.search('\\b' + classArray + '\\b') != -1) { result.push(list[index]); } } return result; } } } // END return (public methods) }()); |
Часовой пояс GMT +3, время: 13:04. |