Задать вопрос
VIKINGVyksa
@VIKINGVyksa
front-end developer

Что делать если removeClass не работает?

При срабатывании всё улетает у меня , а в консоли пишет
Uncaught TypeError: Cannot read property 'createDocumentFragment' of null
Что делать, и как с этим борются?
$(document).ready(function($) {
    'use stric';
    var scrollHelper = $('.scropp-helper'),
        //buttons DATA
        resaveButton = $('.c-resave'),
        deleteButtons = $('.c-delete'),
        saveButtons = $('.c-save'),
        alltr = $('.main-table tr');

    //=============
    // controllers
    //=============

    //helper
    scrollHelper.children('#scroll-top-helper').click(function(){
        $('body').stop().animate({
            scrollTop: 0
        }, 400);
    });
    scrollHelper.children('#scroll-down-helper').click(function(){
        var that = $('body,html'),
            h=that.height();
        console.log(h);
        that.stop().animate({
            scrollTop:h
        },400);
    });

    //controls
    resaveButton.click(resaveData);
    saveButtons.click(saveData);

    function resaveData(){
        var that = $(this),
            container = that.parent(),
            inputs = container.children('td:not(.controls-td):not([data-id])'),
            controls = container.children('td.controls-td');

            if($('.review-tr').size()===0){
                inputs.each(function(){
                    var v = $(this).html();
                    $(this).html('');
                    $(this).append('<input class="input-tc" type="text" value="'+v+'">');
                });

                //controls
                controls.each(function(){
                    $(this).unbind('click', resaveData);
                    $(this).unbind('click', deleteData);
                    $(this).remove();
                });

                container.append('<td class="controls-td c-save" colspan="2"><span class="icon-admin-ok-squared"></span>Сохранить</td>').click(saveData);

                container.addClass('review-tr');//NOPE!

            }else{
                //nothing
            }
    }
    function saveData(){
        var that = $(this),
            container = that.parent(),
            inputs = container.children('td').children('input.input-tc');

            //сохраняем всё в таблице
        inputs.each(function(){
            console.log($(this));
            var hash = $(this).val();
            $(this).parent().html(hash);
            $(this).remove();
        });

        //delete save button
        that.unbind('click', saveData);
        that.remove();
        //create buttons control
        container.append('<td class="controls-td c-resave"><span class="icon-admin-pencil"></span>Изменить</td>').click(resaveData);
        container.append('<td class="controls-td c-delete"><span class="icon-admin-trash-empty"></span>Удалить</td>').click(deleteData);

        $(this).parent().removeClass('review-tr');//необходимо удалить класс

        // var input = oldEl.children('td').children('input.input-tc');
        //  input.each(function(){
        //      $(this).replaceWith($(this).val());
        //  });
    }
    function deleteData(){
        console.log('ddd');
    }
});
  • Вопрос задан
  • 3594 просмотра
Подписаться 1 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 3
Скорей всего удалять нечего - нет объекта, или тот объект с которого вы хотите удалить класс не поддерживает данный метод. Смотрите объект console.log(obj) перед obj.removeClass('.class')
Ответ написан
Комментировать
paradokso
@paradokso
Начинающий фронт-эндер
Сесть и подумать почему removeClass не работает. Значит вы что-то не так сделали
Ответ написан
Комментировать
PretorDH
@PretorDH
HTML5, CSS3, PHP, JS - люблю в чистом виде.
В вашем наборе находится объект у которого .ownerDocument == null.

Вы пытаетесь оперировать с элементом кoторый отрезан от document.

В переменных постоянно лежат наборы элементов и вы ими пользуетесь.
resaveButton = $('.c-resave'),
        deleteButtons = $('.c-delete'),
        saveButtons = $('.c-save'),
        alltr = $('.main-table tr');

Но вы удаляете эти элементы, а потом создаете новые которые не входят в наборы. А в наборе существуют ссылки на элементы отрезанные от документа - о чём и предупреждение.

Нужно не удалять их .remove(), а пользоваться saveButtons.detach() - чтобу убрать со страницы. И .append(saveButtons) чтобы добавить...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект