Доброго времени суток,
с прошедшим праздником Вас.
Я знаю, что не вежливо просить кого то сделать работу за тебя, но я и не прошу написать за меня скрипт. Если у Вас есть минутка посмотрите пожалуйста и посоветуйте можно ли произвести оптимизацию (если можно). К делу, имеется структура вида:
...<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)
}());