Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.02.2011, 22:14
Новичок на форуме
Отправить личное сообщение для redqueen Посмотреть профиль Найти все сообщения от redqueen
 
Регистрация: 24.02.2011
Сообщений: 1

Помогите оптимизировать скрипт
Доброго времени суток,

с прошедшим праздником Вас.

Я знаю, что не вежливо просить кого то сделать работу за тебя, но я и не прошу написать за меня скрипт. Если у Вас есть минутка посмотрите пожалуйста и посоветуйте можно ли произвести оптимизацию (если можно). К делу, имеется структура вида:

...<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)
}());
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите оптимизировать скрипт смены изображений с анимацией Khmelevsky Элементы интерфейса 5 06.03.2010 19:02
Помогите настроить скрипт раскрывающегося меню melomanfm Работа 6 10.08.2009 01:21
Помогите создать скрипт замены картинок при наведении курсора. SantaS Я не знаю javascript 3 05.06.2009 12:59
Люди, помогите адаптировать скрипт под Оперу KiLLk Opera, Safari и др. 1 01.06.2009 01:05