Element.appendChild () задыхается в IE

У меня есть следующий javascript:

  css = document.createElement('style');
  css.setAttribute('type', 'text/css');
  css_data = document.createTextNode('');
  css.appendChild(css_data);
  document.getElementsByTagName("head")[0].appendChild(css);

по какой-то причине только в IE он давится "css.appendChild (css_data);" Выдает ошибку: «Неожиданный вызов метода или доступа к свойству»

Что происходит?

Поведение ключевого слова "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) для оценки ваших знаний,...
4
0
12 166
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Вместо этого попробуйте:

var css = document.createElement('style');
css.setAttribute('type', 'text/css');

var cssText = '';
if (css.styleSheet) { // IE does it this way
    css.styleSheet.cssText = cssText
} else { // everyone else does it this way
    css.appendChild(document.createTextNode(cssText));
}

document.getElementsByTagName("head")[0].appendChild(css);

привет, то же самое относится и к элементам скрипта? У меня аналогичная проблема, но с элементом скрипта, когда я хочу динамически загружать код javascript ...

Daniel van Dommele 15.07.2013 12:07

Это особенно характерно для элемента "style", IE не позволяет использовать для него метод appendChild ().

не разрешено appendChild () с HTMLStyleElement в I.E.

проверить это

@crescentfresh

Я попробовал ваше предложение, и содержимое блока стилей просто никогда не заполняется. Пробовал в IE6 и IE7 ... похоже, не работает что-нибудь

Вот мой измененный код:

function load_content()
{
  var d = new Date();

  css = document.createElement('style');
  css.setAttribute('type', 'text/css');
  if (css.styleSheet) { css.styleSheet.cssText = 'testing'} //Because IE is evil
  else { css_data = document.createTextNode(''); css.appendChild(css_data); } //And everyone else is cool
  document.getElementsByTagName("head")[0].appendChild(css);

  new Ajax.PeriodicalUpdater('content', '/%doc_path%?'+d.getTime(),
  {
    method: 'post',
    frequency: 5,
    onSuccess: function(transport) {
          new Ajax.Request('/%css_path%?'+d.getTime(), {
              method: 'get',
              onSuccess: function(transport) {

                if (css.styleSheet) { css.styleSheet.cssText = transport.responseTex}
                else { 
                    var new_css_data = document.createTextNode(transport.responseText);
                    css.replaceChild(new_css_data, css_data); 
                    css_data = new_css_data;
                } 
              }
          });
    }
  });
}

Любые идеи?

Две вещи: 1) Как вы проверяете, что блок стиля не получает контент? Панель инструментов разработчика IE или что-то в этом роде? 2) Вместо «тестирования» попробуйте body {font-size: 45px; } '(попробуйте законный CSS).

Crescent Fresh 13.01.2009 05:58

У меня есть букмарклет, который покажет вам источник документа в памяти, а не источник файла ... не уверен, что вы имеете в виду для # 2

Adam Haile 13.01.2009 06:44

css.styleSheet.cssText = 'тело {размер шрифта: 45 пикселей; } ';

Crescent Fresh 13.01.2009 08:14

Показывает ли букмарклет CSS внутри других тегов <style> на странице?

Crescent Fresh 13.01.2009 08:14

да ... букмарклет показывает CSS внутри тегов стиля. он также показывает это в этом конкретном теге в других браузерах.

Adam Haile 13.01.2009 14:40

Две вещи: 1) Что за букмарклет? 2) Вы пробовали css.styleSheet.cssText = 'body {font-size: 45px; } ';? Это должно дать вам визуальное представление о том, работает ли он.

Crescent Fresh 13.01.2009 15:24

Букмарклет здесь: adamhaile.com/projects/bookmarklets Я пробовал, ваше другое предложение, и оно привело меня к моему окончательному решению, которое на самом деле было проблемой из-за того, что другой раздел кода возился с этим. Спасибо за помощь.

Adam Haile 13.01.2009 16:30

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