2010-03-04 97 views
2

我嘗試在quirks-mode中將類添加到使用javascript與Internet Explorer 8的td-element中。這似乎工作,因爲我可以看到添加的類,當我查看源,但我的CSS不會影響它,所以沒有任何視覺上的變化。 我只是添加一個html類來改變背景顏色,但沒有任何反應。 它運行在IE正常模式下時運行,但這不是一個選項,因爲我無法更改站點,並且它運行在怪異模式下。向quirksmode中的元素添加類

編輯:

下面是一個簡單的例子:

<html> 
<head> 
<style> 
    .style1 { background-color: #ff0000; } 
    .style2 { background-color: #00ff00; } 
</style> 
</head> 
<body> 
<table id="table1"> 
    <tr> 
     <td>some text</td> 
     <td>goes on</td> 
     <td>and on</td> 
    </tr> 
</table> 
<script type="text/javascript"> 
    var tableElement = document.getElementById("table1"); 
    tableElement.setAttribute("class", "style1"); 
</script> 
</body> 
</html> 

注意,它並沒有在怪異模式雖然類獲取添加(與IE 8測試)工作(無法使用IE開發人員工具查看)

+0

您使用的直JS或庫?你能添加js和生成的HTML嗎? – 2010-03-04 09:37:19

+0

我使用直線js,看看我的編輯 – apparat 2010-03-04 09:49:16

+0

HTML類。不是CSS類。 CSS具有*類選擇器*,它使*規則集*應用於具有* HTML類*的元素*或UA知道的特定XML模式中的類。 – Quentin 2010-03-04 12:08:23

回答

3

Internet Explorer 7和下部(和模擬7時8)有一個完全破碎實施的setAttribute(和的getAttribute)的。

有效它的工作原理是這樣的:

HTMLElement.prototype.setAttribute = function (property, value) { 
    this[property] = value; 
} 

這打破時,屬性名和屬性名是不一樣的(例如,當屬性名是保留字(如類)或用於別的東西(如風格))。

使用foo.className = 'bar'代替foo.setAttribute('class','bar')

+0

我有一個類似的問題,只是我的課會像這樣: 'table.Show1 .cellType2,table.Show1 .cellType3 { display:none; }' 此修復方法不能使細胞再次拉回自己。 – Sednus 2013-03-20 19:28:21

1

我想出了一個系統,它根據您想要添加到元素的任何樣式構建樣式表,然後將其添加到HTML中。它似乎適用於我嘗試過的所有瀏覽器,包括各種IE瀏覽器。它不適用於類,但可以輕鬆實現上面描述的內容。

文章: http://www.4pmp.com/2009/11/dynamic-css-pseudo-class-styles-with-jquery/

+0

這也是一個不錯的方法,但foo.className ='bar'是我的問題的更好的解決方案。 – apparat 2010-03-04 13:11:15