Ответы пользователя по тегу JavaScript
  • Как обратиться к первой строке массива?

    mosesfender
    @mosesfender
    Меланхолик, параноик, падал с коек
    Ну если очень нужно, то так:
    return this.items.map((current) => {
       return current.value
    })[0];


    Но я бы всё таки пристроил возвращаемое занчение в какую-нибудь переменную.
    Ответ написан
    Комментировать
  • Конфликт сриптов на wordpress, как решить проблему?

    mosesfender
    @mosesfender
    Меланхолик, параноик, падал с коек
    velocity() - это чей метод?
    Ты пытаешься исполнить velocity() JQuery, так как g.delay(100) возвращает jQuery объект, если мне что-то не изменяет.
    Ответ написан
    Комментировать
  • Добавить в таблицу строку со столбцами?

    mosesfender
    @mosesfender
    Меланхолик, параноик, падал с коек
    Вставлять-то надо ряд таблицы.
    $('<tr><td class="uid">…</td><td class="uname">username-…</td><td><a href="#" class="edit">edit</a></td></tr>').appendTo('table.table.table-hover');
    Ответ написан
  • События после динамического добавления контента. Есть ли решение на native JS?

    mosesfender
    @mosesfender
    Меланхолик, параноик, падал с коек
    document.addEventListener('focus', function(ev){
      if(ev.target instanceof HTMLInputElement){
         …
      }
    });
    Ответ написан
    Комментировать
  • Как получить содержимое iframe с помощью js?

    mosesfender
    @mosesfender
    Меланхолик, параноик, падал с коек
    Как частный случай, нужно взять текст документа любым доступным способом, и создать из него документ в своём домене.
    Ответ написан
    Комментировать
  • Как получить полное имя класса по его началу?

    mosesfender
    @mosesfender
    Меланхолик, параноик, падал с коек
    Приделайте к classList функцию поиска. Например:
    DOMTokenList.prototype['find'] = function (tokenPart) {
            return [].map.call(this, function (_token) {
                if (_token.search(tokenPart) >= 0) {
                    return _token;
                }
                return null;
            })[0];
        };


    Соответственно, использование:
    document.body.classList.find('abc'); // Вернёт null
    document.body.classList.find('fontsize'); // Вернёт fontsize100
    document.body.classList.find('font'); // Вернёт fontsize100
    document.body.classList.find('size'); // Вернёт fontsize100
    Ответ написан
    Комментировать
  • Хранение информации в js переменных?

    mosesfender
    @mosesfender
    Меланхолик, параноик, падал с коек
    Где угодно можно хранить. Можно прям объект со всем функционалом сделать, и непосредственно создать его как property HTMLElement'а. Можно совсем уж сделать класс в прототипе, и работать с ним.

    содержимое переменной будет храниться до тех пор пока не будет закрыта страница, т.е. переменные хранятся в оперативной памяти которую браузер выделил всей странице?

    Будет храниться пока не прибъёшь её, или пока не будет уничтожен документ.
    Убивается переменная довольно просто:
    var anyVar = 678594;
    anyVar = null;
    Ответ написан
    Комментировать
  • В каких случаях лучше создать клон объекта вместо работы с оригиналом?

    mosesfender
    @mosesfender
    Меланхолик, параноик, падал с коек
    Во всех случаях, когда требуется не изменять оригинал.
    Ответ написан
    Комментировать
  • Как решить задачу, Javascript?

    mosesfender
    @mosesfender
    Меланхолик, параноик, падал с коек
    Ну или так:
    document.addEventListener('DOMContentLoaded', function(){
            let arr = ['foo', 'bar', 'baz'];
            
            /* Native JS */
            let containerJS = document.createElement('div');
            [].map.call(arr, function(_el){
                let _p = document.createElement('p');
                _p.innerHTML = _el;
                containerJS.appendChild(_p);
            });
            document.body.appendChild(containerJS);
            
            /* jQuery */
            let containerJQ = $('<div></div>').appendTo($('body'));
            $.each(arr, function(_idx, _el){
                $('<p></p>').html(_el).appendTo(containerJQ);
            });
        });
    Ответ написан
    Комментировать
  • Как сделать сортировку блоков div по тексту внутри?

    mosesfender
    @mosesfender
    Меланхолик, параноик, падал с коек
    В JavaScript есть в прототипе массива традиционная для всех функция sort().
    Для примера сделаем такую табличку:
    <a href="javascript:" data-sort="alphabet">sort by alpabet</a>
    <a href="javascript:" data-sort="amount">sort by amount</a>
    
    <div id="lst">
        <div><span>jsghgori</span><span>345</span></div>
        <div><span>ouerok</span><span>98</span></div>
        <div><span>qiewhfh</span><span>548</span></div>
        <div><span>nvxcmk</span><span>234</span></div>
        <div><span>kefoo</span><span>38</span></div>
    </div>


    Теперь напичкаем её функционалом для сортировки и рисования:
    <script>
        var lst = document.getElementById('lst');
        Object.defineProperties(lst, {
            _direct: {
                /**
                 *  Направление сортировки
                 *  0 - a->z
                 *  1 - z->a
                 */
                value: 0,
                writable: true
            },
    
            direct: {
                get: function () {
                    return this._direct;
                },
                set: function (val) {
                    this._direct = Math.abs(this._direct - 1);
                },
                enumerable: true,
                configurable: true
            },
            _dataArr: {
                /* Массив с данными */
                value: [],
                writable: true,
            },
            data: {
                /* Получить массив с данными */
                get: function () {
                    let _that = this;
                    if (!this._dataArr.length) {
                        /* Если массив пуст, получим данные */
                        [].map.call(this.children, function (_row) {
                            let _dataRow = {
                                title: _row.children[0].innerHTML,
                                amount: parseInt(_row.children[1].innerHTML),
                                element: _row
                            }
                            _that._dataArr.push(_dataRow);
                        });
                    }
                    /* В любом случае возвертаем массив */
                    return this._dataArr;
                }
            },
            sortByAlphabet: {
                value: function () {
                    let _that = this;
                    this.data.sort(function (a, b) {
                        if (_that.direct) {
                            return a.title > b.title ? 1 : -1;
                        } else {
                            return a.title > b.title ? -1 : 1;
                        }
                    });
    
                    this.direct = true;
                    this.drawRows();
                },
                writable: false
            },
            sortByAmount: {
                value: function () {
                    let _that = this;
                    this.data.sort(function (a, b) {
                        if (_that.direct) {
                            return a.amount > b.amount ? 1 : -1;
                        } else {
                            return a.amount > b.amount ? -1 : 1;
                        }
                    });
                    this.direct = true;
                    this.drawRows();
                },
                writable: false
            },
            drawRows: {
                value: function () {
                    for (let i = 0; i < this.data.length; i++) {
                        this.appendChild(this.removeChild(this.data[i].element));
                    }
                },
                writable: false
            }
        });
        document.addEventListener('click', function (ev) {
            if (ev.target.hasAttribute('data-sort')) {
                switch (ev.target.getAttribute('data-sort')) {
                    case 'alphabet':
                        lst.sortByAlphabet();
                        break;
                    case 'amount':
                        lst.sortByAmount();
                        break;
                }
            }
        });
    </script>


    Весь цимес в lst.sortByAlphabet() и lst.sortByAmount(). То есть, sort() внутри себя перебирает все элементы массива со своим соседом, передавая их в аргументах, чем мы и пользуемся для сравнения их. Что сравнивать, решаем сами.
    Ответ написан
    1 комментарий
  • Как отследить js события в браузере?

    mosesfender
    @mosesfender
    Меланхолик, параноик, падал с коек
    Не совсем понял вопрос.
    Но маленький лайфхак по мотивам "2.2 Либо не могу правильно ввести название dom элемента, встречал и такое написание getEventListeners($(#element)) и такое getEventListeners(#element) как нужно то? Нужно класс элемента вставлять или id или как?"
    Во всех консолях, если в DOM-панели элемент выделить, его можно использовать как $0. 5c77b07c0b62e504495454.png
    Ответ написан
    1 комментарий
  • Как повесить обработчик доступа get на массив?

    mosesfender
    @mosesfender
    Меланхолик, параноик, падал с коек
    document.prototype['getElementsByMyMethod'] = function(params){
        … <тут своя функция, возвращающая то что надо> …
    };
    
    var arr = document.getElementsByMyMethod(params);
    Ответ написан
  • Как менять class при нажатие на onclick?

    mosesfender
    @mosesfender
    Меланхолик, параноик, падал с коек
    function filterRecords(id) {	
        $('ul.services-tab li a').removeClass('active');
        $(this).toggleClass('active');
    };
    Ответ написан
  • Как отобразить ошибку из Javascript в html?

    mosesfender
    @mosesfender
    Меланхолик, параноик, падал с коек
    Ошибки JavaScript нужно выводить в консоль. Обычно их обрабатывают, иногда даже заключают в try{…}catch(err){concole.error(err);}

    А то что в сабже - это информативные сообщения.
    Ответ написан
    Комментировать
  • Как получить параметр из строки?

    mosesfender
    @mosesfender
    Меланхолик, параноик, падал с коек
    Например так:
    let a = '/reviews/?PAGEN_1=2'.match(/\?(.*)=(.*)$/u);
    // a[2] - искомое значение
    Ответ написан
    Комментировать
  • Что нужно сделать, чтобы срабатывали функции и плагины jquery для динамически добавленных элементов?

    mosesfender
    @mosesfender
    Меланхолик, параноик, падал с коек
    Это инициализация плагина для элементов с селектором .open-popup-ajax. Стало быть, нужно либо в $.ajax.done() инициализировать плагин на вновь создаваемых элементах, либо попробовать делегировать документу. Но и тогда придётся толкать документ на инициализацию.

    Короче, после добавления элемента, делай то же самое:

    $($(<что-то там>).append(<чтототам>)).magnificPopup({
        type:'ajax',
        midClick: true,
        mainClass: 'my-mfp-zoom-in',
        overflowY: 'scroll',
        tLoading: 'Загрузка...',
      });
    Ответ написан
  • Как при помощи jquery изменить html разметку таблицы на div блоки?

    mosesfender
    @mosesfender
    Меланхолик, параноик, падал с коек
    Табличка уже сформирована, так как скрипт запускается по $(document).ready().
    И, сдаётся мне, таким способом не получится изменять DOM-модель. Делов том, что это не текст, а созданные объекты в иерархии DOM. Даже jQuery не сможет путём замены букв изменить структуру документа. Нужно брать в цикле от низу (td), и, поднимаясь до table, забирать содержимое узла, и заменять узел на div.
    Ответ написан
    Комментировать
  • Вывод данных из БД в таблицу. Как получить id записи?

    mosesfender
    @mosesfender
    Меланхолик, параноик, падал с коек
    Обычно, в узел ряда ставится идентификатор записи в data.
    <table><tr data-user-id="1"><td>…</td></tr></table>


    А по нажатию кнопки уже получаем атрибут data-user-id этого ряда.
    document.addEventListener('click', function(ev){
        if(ev.target.closest('[data-user-id]')){
            let userID = ev.target.getAttribute('data-user-id');
    /* дальше что-то делаем с этим ID */
        }
    });
    Ответ написан
    Комментировать
  • Как сделать динамичную прогрузку контента?

    mosesfender
    @mosesfender
    Меланхолик, параноик, падал с коек
    Не совсем понятно почему аж минуту грузится. Их там сколько?

    Ну и таблицы - это всё таки тоже накладывает отпечаток. В отличие от блочных элементов, таблица не видна в браузере, пока не догрузится закрывающий таблицу тэг.
    Ответ написан
  • Не работает classList в IE11, что можно сделать?

    mosesfender
    @mosesfender
    Меланхолик, параноик, падал с коек
    Тут нужно смотреть вверх что от чего наследуется. У cards[i] что в прототипах?

    У нормальных браузеров classList появляется в Element. У лубка микрософта - в HTMLElement. Потому, объект, который наследуется от Element не имеет classList. Например, SVGSVGElement.
    Ответ написан
    Комментировать