Element.appendChild () дроссели в IE - PullRequest
4 голосов
/ 12 января 2009

У меня есть следующий 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);" Выдает ошибку: «Неожиданный вызов доступа к методу или свойству»

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

Ответы [ 4 ]

14 голосов
/ 12 января 2009

Попробуйте вместо:

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);
0 голосов
/ 13 января 2009

@ 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;
                } 
              }
          });
    }
  });
}

Есть идеи?

0 голосов
/ 12 января 2009

никакая appendChild () не разрешена с HTMLStyleElement в I.E.

проверить

0 голосов
/ 12 января 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...