2010-03-04 77 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