после звонка с 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))
, я сделал это до вызова axios. Молодец и спасибо! :)
Я добавил правильный ответ с парой решений и ссылкой для понимания того, как рассчитывается this
.
Кажется, это ошибка, связанная с this
, а не с ошибкой jQuery. Вы можете проверить, как рассчитывается this
на этом другом ответе, который я опубликовал.
Есть 3 простых способа решить вашу проблему.
this
в переменной (обычное имя self
)var self = this;
axios.post(url).then(function(response) {
$(self).replaceWith($.parseHTML(replacedElement));
});
this
не изменитсяaxios.post(url).then((function(response) {
$(this).replaceWith($.parseHTML(replacedElement));
}).bind(this));
arguments
и this
(не будут работать в старых браузерах)axios.post(url).then((response) => $(this).replaceWith($.parseHTML(replacedElement)));
Вы добавили
console.info(this)
внутрь функцииthen
, потому что я уверен, чтоthis
не будет ссылаться на один и тот же объект? Если это проблема, попробуйте сохранитьthis
в переменной типаvar self = this
и использоватьself
вместоthis
внутри функцииthen
.