2

quirksモードのInternetExplorer8でjavascriptを使用して、td要素にクラスを追加しようとしています。ソースを表示すると追加されたクラスが表示されるため、これは機能しているようですが、cssは影響を与えないため、視覚的には何も変化しません。背景色を変更するためにhtmlクラスを追加するだけですが、何も起こりません。IEの通常モードで実行している場合は機能しますが、サイトを変更できず、quirksモードで実行しているため、これはオプションではありません。

編集:

簡単な例を次に示します。

<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開発ツールで表示できます)、quirksモード(IE 8でテスト済み)では機能しないことに注意してください。

4

2 に答える 2

3

Internet Explorer 7以前(および7をエミュレートする場合は8)には、setAttribute(およびgetAttribute)の完全に壊れた実装があります。

事実上、次のように機能します。

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

これは、プロパティ名と属性名が同じでない場合(プロパティ名が予約語(クラスなど)である場合や、他の何か(スタイルなど)に使用されている場合など)に機能しなくなります。

foo.className = 'bar'の代わりに使用foo.setAttribute('class','bar')

于 2010-03-04T12:06:24.017 に答える
1

要素に追加したいスタイルに基づいてスタイルシートを作成し、それをHTMLに追加するシステムを思いつきました。IEのさまざまなフレーバーを含め、私が試したほぼすべてのブラウザーで動作するようです。クラスでは機能しませんが、上記で説明したことを簡単に実現できます。

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

于 2010-03-04T11:55:48.547 に答える