0

以前は、インライン スタイル タグを使用してページの CSS を変更できました。これは恐ろしく聞こえるかもしれませんが、一種の WYSIWYG (ただしテキストではありません) で作業しているときにカスタム CSS を記述するためのものです。

私は次のようなことをしていました: tag.styleSheet.cssText = myrules;

正確な時期はわかりませんが、これを試してみると、ある時点でIEが「無効な引数」と言い始めました。本当の核心は、他のブラウザでtag.innerHTML = 'body {}'Unable to set value of the property 'innerHTML': object is null or undefined起こらないことです。

編集

明確にするために、インライン スタイル タグを使用しています。インライン スタイル属性を使用しようとしていません。

<style type="text/css" id="mytag"></style>

そのタグの内部を変更するにはどうすればよいですか?

EDIT 2 このフィドルを参照してください:

http://jsfiddle.net/tTr5d/

tag.styleSheet.cssText の私のソリューションは、styleSheets プロパティを使用するのと同じようです。cssText の最後の定義をコメントアウトして、@Teemu の提案どおりに動作することを確認できます。だから今、私は自分のアプリでなぜそれが機能しないのか本当に迷っています。誰かがその機能を壊す可能性のあるアイデアを持っているなら、それは素晴らしいことです. それまでの間、私は自分のアプリをいじくり回します。

4

4 に答える 4

6

IE は 32 個のスタイルシートに制限されています。どうやらその事実を忘れたいのですが、これにはインラインスタイルタグが含まれているようで、<link>.

ファイルをまとめるため、サンドボックスを変更して縮小を有効にしました。

その後、私のコードは機能しました。

したがって、制限を超えてJS経由で挿入すると、私がやったことを試すまで実際のエラーは発生しないようです。

于 2012-06-11T23:06:04.940 に答える
1

styleSheetオブジェクトへの参照は、styleSheetsコレクション (またはimportsコレクション) を介してのみ取得できます。要素を直接参照するとstyle、HTML 要素が取得されます。(単純なループ内で両方のオブジェクトのプロパティを確認for..inし、違いを確認してください)

これはすべての IE で機能し、結果はすぐにレンダリングされます。

document.styleSheets['mytag'].addRule('BODY', 'background-color:red');

MSDNの詳細: styleSheet オブジェクト

于 2012-06-11T20:07:54.403 に答える
0

jQueryを使用できます。インライン スタイルの場合は、.attr()関数を使用できます。

$("#myElement").attr('style')

それ以外の場合は、何.css()が提供されているかがわかります。これを使用して、さまざまな CSS スタイルを取得および設定できます。

その他の CSS 関連の jQuery メソッド

于 2012-06-11T18:28:23.483 に答える
0

スタイル要素と IE の innerHTML については、あまりうまくいきませんでした。IE 用に分岐する必要がある場合でも、dom メソッドの方が確実です。

jqueryなし-

function addNewStyle(str, title){
    var el= document.createElement('style');
    if(title) el.title= title;
    if(el.styleSheet) el.styleSheet.cssText= str;
    else el.appendChild(document.createTextNode(str));
    document.getElementsByTagName('head')[0].appendChild(el);
    return el;
}
于 2012-06-11T19:13:53.907 に答える