github репозиторий https://github.com/delverOne25
Контакты

Достижения

Все достижения (9)

Наибольший вклад в теги

Все теги (65)

Лучшие ответы пользователя

Все ответы (18)
  • Как улучшить код javaScript и подход в целом?

    @daniil14056
    Уделил час времени, вот основные недочеты, будет приятно если ознакомитесь.
    1.!!!!!! Много обработчиков. Можно одним все решить. Почитайте про делегирование событий.
    ///
    var interface=document.getElementById("interface");
    interface..addEventListener('input', function (e) {
            var target= e.target || e.srcElement // получаем элемент где произошло событие
            switch(target.id){    
                  case "hatHarmon" : // для каждого input
                          aVolume = e.target.value;
                           break;
                   case  //.....
        });
    // И проще и быстрее и нагляднее. Вместо мусора ...Button-ов то же самое одним все накрыть.


    2.Слишком много document.querySelector ты каждый раз во всем document, то есть во всем dom дереве ищешь то что находиться рядом! Намного быстрее будет
    var interface=document.getElementById("interface"); 
    var hatValume=interface.querySelector("#hatVolume")
    tomValue=hatValume.parentElement.nextElementSibling.querySelector("#tomVolume");

    3. getDocumentId быстрее чем querySelector(#id) в разы, сам проверял.

    4. Область видимости ;(function(){ ю..весь код...})();

    5. У тебя ++i в конце в цикле script.js не обрабатывает первый элемент.. Замени на i++;
    Т.е. ты находишь элемент и уже в нем ищешь.

    6.
    if (dCh.checked) {
            dVel = 1;
        };
        
        if (!dCh.checked) { // зачем, лишние операции, потеря скорости,  замени на else
            dVel = 0.5;
        };
    
        if (cCh.checked) {
            cVel = 1;
        };
        // не красиво долго, плохие имена, я путаю, "dCh cCh - 10 сек уходит на нахождение различия". Код не поддерживается, долго искать что такое cCh, вся область засорена мусорными глобальными переменными. 
    // Решение, разбить все на блоки или функции, или Паттерн реализовать, к примеру фабрику для звуков и акцентов
    // Массивы у вас не массивы а куча переменных, можно автоматизировать циклом, создать массив из этих элементов, и перебирая его уже составить 2 массива из звуков и акцентов, и уже работать с ними.

    7. Не правильно именуете переменные, переменные с маленькой буквы именуют, а классы большими.

    8style.css очень плохо, вы снова каждый раз ищите во всем документе. Составляйте более конкретные селекторы
    #start:hover,  
    #stop:hover,
    #clear:hover {
        background-color: #2C7769;
    }
    /* медленно, xQuery долго(для больших проектов конечно) их ищет этот селектор. Нужно расписать до него путь поконкретнее*/
    #playStop div{
           background-color: #2C7769;
    }


    9 Вы много раз в подряд объявляете i, let i не спасает в циклах, у вас есть let i=0; глобальной области в начале где-то. Потом можно уже просто for(i=0;i<....
    Вроде все. Но код рабочий конечно, но почти не живучий.
    Ответ написан
    1 комментарий
  • Как заменить текст с помощью регулярных выражений в jQuery?

    @daniil14056
    Регулярные выражения нужны при парсинге страницы, и извлечении информации, а jQuery это уже работа с dom этой страницы
    Вот ууделил времени, без JQuery изменяем текст, к примеру шаблон какой-то, пришедший с сервера и добавляем в документ.
    /**
     * Изменяет по шаблону все найденные совпадения
     * @param htmlcode    страница которую нужно изменить
     * @param listReplace  список значений для изменения найденных
     * @param pattern      паттерн регулярное выражения поиска
     * @param globalFind   нужно ли изменять все значения или только одно
     * @returns {*|string|void}  возращаяет изменненный текст html документа
     */
    function  replaceToken(htmlcode, listReplace,pattern, globalFind = true) {
        /**
         * Получает список токенов, которыми нужно заменить
         * Возращает заряженный генератор с списком по порядку выражений замены,
         * каждый раз будет возращать новое значение замены, список может быть прислан с сервера,
         * в случаее если найденных значений будет больше, то он не чего не измениn. Выражение "$&"
         * не изменяет найденое вхождение
         * @param list_tokens - массив- список значений которыми нужно заменить всякие 0x23423j343/
         * @returns {{generator: generaterSReplace}} возвращает генератор, который каждый раз будет возвращать следующие значения для замены 
         */
        function  loadGenerator(list_tokens) {
            return {
                generator: function* generaterSReplace() {
                    for(let i=0; i<list_tokens.length;i++)
                        yield list_tokens[i];
                    return "$&";
                }
            }
        }
    
        let generator=loadGenerator(list_tokens).generator();
        let reg;
        if(globalFind || listReplace instanceof Array)
            reg =new RegExp(pattern,["mg"]);
        else
             reg=new RegExp(pattern,["m"]);
    
        return res =htmlcode.replace(reg,function(str1,str2){
            return str1.replace(str2,generator.next().value);
        });
    
    }/****************TEST-------------------------TEST***********************************/
    var list_tokens=["1234567890","0987654321"];  // значения для замены, то есть html документ к примеру шаблон присланный с сервера или исходный текст самой страницы к примеру  
    //                  var htmlCode; 
    //                  $.get(document.location.href, function(data){htmlCode=data.data});
    let html='разные там <b>html</b>елементы. А вот и трока поиска: </b><b id="finish_kar_cri">0x61496a395F549XzxzxZ</b>....' +
        'a вот  еще один такой же элемент(предположим что там class а не id для массового поиска)'
        +'<b id="finish_kar_cri">0x323232323</b>...';
    
    let pattern='<b id="finish_kar_cri">(\\w+)</b>'; // ваша строка поиска в скобках значениыя ддля замены
    var res=replaceToken(html,list_tokens,pattern);   // возвращаем имененную строку
             $(document).append(res);        // console.log(res)// результат, измененная   текст с вашим токеном


    А это просто работа с самим текущим документов jquery
    // token[1] - и будет найденным текстом
    var ell=$("#finish_kar_cri");
    var lastVal=ell.text(); // запомнили старое значение
    ell.text("8496444");
    Ответ написан
    Комментировать
  • Как работать с z-index?

    @daniil14056
    Представь любой элемент с position:absolute; как книгу, а теперь положи все такие книги в стопку. у какого элемента z-index будет больше тот будет выше всех.
    Ответ написан
    Комментировать
  • Как получить содержимое тега script?

    @daniil14056
    Добавь id r скрипту или найди его селектор
    var script=document.getElementById("id-script");
    var scriptTarget=document.getElementById("id-script-target");
    scriptTaget.innerText=script.innerTarget; // скрипт не будет исполнен, так как этот элемент уже был загружен.
    // более правильно будет создать элемент скрипта и добавить его на страницу
    var s=document.createElement("script");
    s.innerText=script.innerText;
    document.body.appendChild(s);
    Ответ написан
    Комментировать
  • Книги по ООП (не для начинающих)?

    @daniil14056
    Очень хороший сайт, с красивой теорией с аналогиями и примерами из жизни, схемы и примеры программ для Java, но с теорией сразу ООП поймете
    https://refactoring.guru/ru/design-patterns/bridge
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (197)