2009-01-12 45 views
4

我有以下的javascript:Element.appendChild()扼流圈IE

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);」 給出錯誤:「意外調用方法或財產訪問」

發生了什麼事?

回答

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

你好,同樣的事情適用於腳本元素?我有一個類似的問題,但隨後與腳本元素,當我想要動態加載JavaScript代碼... – 2013-07-15 08:07:41

0

這是特別是與「風格」元素IE不允許在其上的appendChild()方法。

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

任何想法?

+0

兩件事情:1)你如何驗證樣式塊沒有得到內容? IE開發工具欄或什麼? 2)而不是'測試'嘗試'身體{font-size:45px; }'(iow嘗試合法的CSS)。 – 2009-01-13 02:58:59