Добавляемый элемент не работает в IE11

В конструкторе создаю элемент

var this.legendElement = this.compileLegend();

и чем позже я хочу использовать его в слушателе событий:

var takeControl = function() {
    this.element.empty();
    this.legendElement.appendTo(this.element);
}

legendElement добавляется, но остается пустым! Я не понимаю почему. В других браузерах (проверено firefox, chrome) работает.

Также, когда я печатаю содержимое this.legendElement, я вижу HTML-код, как и ожидалось. Другими словами

console.log(this.legendElement);

создает ожидаемый html-код с правильным содержанием (и я вызываю его внутри функции takeControl).

Я пробовал несколько способов исправить это

this.element.append(this.legendElement)

тоже не работает.

Этот:

this.element.append(this.legendElement.html())

добавляет html-код, но без this.legendElement вокруг него (что ожидается).

Итак, следующие

this.element.append($('<div />').append(this.legendElement).html())

делает то, что я хочу, но это кажется ужасным взломом.

Итак, мой вопрос: что происходит и могу ли я получить

this.element.append(this.legendElement)

работать?

Заранее спасибо! ^ _ ^


person graywolf    schedule 11.07.2014    source источник
comment
Что именно возвращает this.compileLegend(); и какова структура this.element?   -  person T J    schedule 11.07.2014
comment
this.compileLegend () просто заполняет $ ('‹div /›') подэлементами и возвращает его ... некоторые промежутки и изображения ... this.element - это просто $ ('‹div /›')   -  person graywolf    schedule 11.07.2014
comment
У меня такая же проблема с добавлением опции для выбора в режиме совместимости ...   -  person pen2    schedule 18.09.2014
comment
просто загрузите ресурсы для этого только что добавленного элемента html следующим образом: jQuery.ajaxSetup ({async: false}); $ .get (wwwroot / bootnavbar / bootnavbar.css) .done (function () {// существует код jQuery.ajaxSetup ({async: true});}). fail (function () {// код jQuery не существует. ajaxSetup ({async: true});}); Дополнительная информация: stackoverflow.com/a/66488564/14491024   -  person MikeRyz    schedule 05.03.2021


Ответы (3)


IE11 (по крайней мере, моя версия или настройки) не поддерживает element.append. Однако с element.appendChild он работал так, как ожидалось.

Раздел MDN о совместимости браузеров подтверждает, что IE (в отличие от всех других браузеров) никогда не имел ParentNode.append, но всегда имел Поддержка Node.appendChild, которая кажется универсальной.

person Zane    schedule 13.06.2018
comment
Пометить это как принятый ответ, несмотря на то, что он не тестировался (я, это 4 года, и этот проект давно ушел ...) - person graywolf; 14.06.2018

Вместо неподдерживаемого el.append() следует использовать универсальный el.appendChild()!

person antoni    schedule 13.08.2020

Я не нашел причины для этой ошибки, но я обошел ее, создав поддерево элемента (функция compileLegend) каждый раз, когда я хотел добавить. Требовался какой-то уродливый код, чтобы правильно настроить слушателей, но это единственное, что у меня сработало.

person graywolf    schedule 18.09.2014
comment
Если кто-то найдет другое решение, я с радостью сделаю это принятым ответом. - person graywolf; 18.09.2014