JQuery - невозможно использовать функцию replaceWith () - невозможно прочитать свойство createDocumentFragment неопределенного

после звонка с Axios хочу заменить текущий пункт на новый. Я поступаю так:

var replacedElement = "<span class='float-right' aria-hidden='true'>" +
            "<i class='fas fa-check icon-color'></i>" +
            "</span>";

        axios.post(url).then(function (response) {
           $(this).replaceWith($.parseHTML(replacedElement));
        });

Но у меня следующая ошибка: Uncaught (in promise) TypeError: Cannot read property 'createDocumentFragment' of undefined

Мой $(this) ссылается на элемент span:

Так что я не понимаю, почему у меня эта ошибка

Вы добавили console.info(this) внутрь функции then, потому что я уверен, что this не будет ссылаться на один и тот же объект? Если это проблема, попробуйте сохранить this в переменной типа var self = this и использовать self вместо this внутри функции then.

nick zoum 22.12.2020 15:12

Ты прав. Когда я сделал console.info ($(this)), я сделал это до вызова axios. Молодец и спасибо! :)

eronn 22.12.2020 15:19

Я добавил правильный ответ с парой решений и ссылкой для понимания того, как рассчитывается this.

nick zoum 22.12.2020 15:45
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, это ошибка, связанная с this, а не с ошибкой jQuery. Вы можете проверить, как рассчитывается this на этом другом ответе, который я опубликовал.

Есть 3 простых способа решить вашу проблему.

  1. Сохранение this в переменной (обычное имя self)
var self = this;
axios.post(url).then(function(response) {
  $(self).replaceWith($.parseHTML(replacedElement));
});
  1. Использование Function#bind, чтобы убедиться, что this не изменится
axios.post(url).then((function(response) {
  $(this).replaceWith($.parseHTML(replacedElement));
}).bind(this));
  1. Использование функций стрелок, которые не изменяют arguments и this (не будут работать в старых браузерах)
axios.post(url).then((response) => $(this).replaceWith($.parseHTML(replacedElement)));

Другие вопросы по теме