IE中的Element.appendChild()chokes

时间:2009-01-12 19:37:53

标签: javascript internet-explorer

我有以下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 个答案:

答案 0 :(得分:14)

尝试改为:

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

答案 1 :(得分:0)

这特别是“style”元素,IE不允许使用appendChild()方法。

答案 2 :(得分:0)

I.E中 HTMLStyleElement 不允许使用appendChild()。

check it out

答案 3 :(得分:0)

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

有什么想法吗?