私は現在 Webkit (Safari と Chrome) で問題を抱えています。いくつかの html を div に動的に (innerHTML) ロードしようとすると、html には css ルールが含まれています (...)。html がレンダリングされた後、スタイル定義はロードされません (そのためスタイルがそこにないことが視覚的にわかります。また、javascriptで検索してもスタイルが見つかりません)。jquery プラグイン tocssRule() を使用してみましたが、機能しますが、遅すぎます。スタイルを動的にロードする Webkit を取得する別の方法はありますか? ありがとう。パトリック
8 に答える
ドキュメントの先頭に「リンク」タグを追加することをお勧めします。それが不可能な場合は、head に「style」タグを追加してみてください。スタイルタグは本文に含めるべきではありません (検証さえしません)。
リンクタグを追加:
var link = document.createElement('link');
link.setAttribute('rel', 'stylesheet');
link.type = 'text/css';
link.href = 'http://example.com/stylesheet.css';
document.head.appendChild(link);
スタイルタグを追加:
var style = document.createElement('style');
style.innerHTML = 'body { background-color: #F00; }';
document.head.appendChild(style);
まっすぐな jQuery の方法 (Chrome を含む主要なブラウザーで動作します): http://topsecretproject.finitestatemachine.com/2009/09/how-to-load-javascript-and-css-dynamically-with-jquery/
サイトから:
$("head").append("<link />");
var CSS = $("head").children(":last");
CSS.attr({
"rel": "stylesheet",
"type": "text/css",
"href": "url/to.css"
});
注: この例には JS の挿入も含まれていますが、CSS 参照を挿入するだけの場合は無視できます。
最も簡単な方法(jQueryを使用)は次のとおりです。
var cssLink = $('<link />');
cssLink.attr("rel","stylesheet")
cssLink.attr("type", "text/css");
cssLink.attr("href","url/to.css");
そのようにすれば、Safariで動作します。通常の jQuery の方法で (すべて 1 つのテキスト文字列で) 実行すると、失敗します (css は読み込まれません)。
次に、 $('head').append(cssLink); で頭に追加するだけです。
うーん。Andrei Cimpoca の結果に賛成票を投じるのに十分なポイントがありませんが、その解決策がここでは最良の解決策です。
style.innerHTML = "..."; Webkitエンジンまたはつまりでは機能しません。
CSS テキストを正しく挿入するには、次のことを行う必要があります。
style.styleSheet.cssText = "..."; つまり。
と
style.appendChild(document.createTextNode("...")); ウェブキット用。
Firefox は、2 番目のオプション、または style.innerHTML = "..."; でも動作します。
Vatos に感謝します。基本的にはあなたが提案したことを実行しましたが、jquery を使用して html を設定し、head に新しいスタイルを追加しました。私のコードは次のように終わりました
var cssDefinitions = '..my style chunk goes here';
var style = document.createElement('style');'
$(style).html(cssDefinitions);
$('head').append(style);
これがギグです。パトリックが言ったことは私にはうまくいきませんでした。これが私がやった方法です。
var ref = document.createElement('style');
ref.setAttribute("rel", "stylesheet");
ref.setAttribute("type", "text/css");
document.getElementsByTagName("head")[0].appendChild(ref);
if(!!(window.attachEvent && !window.opera)) ref.styleSheet.cssText = asd;//this one's for ie
else ref.appendChild(document.createTextNode(asd));
InnerHTML は非推奨であり、そのような用途には使用しないでください。さらに、速度も遅いです。
上記のスタイル タグ ベースのバージョンに加えて、javascript を直接使用してスタイルを追加することもできます。
var style = document.getElementById('some-style-tag');
var sheet = style.sheet;
sheet.insertRule('.mydiv { background-color: ' + color + '; }', sheet.cssRules.length);
これには、cssText/innerHTML に頼らなくても変数を使用できるという利点があります。
Webkit ベースのブラウザーでは、多数のルールを挿入すると遅くなる可能性があることに注意してください。Webkit のこのパフォーマンスの問題を修正するために未解決のバグがあります ( https://bugs.webkit.org/show_bug.cgi?id=36303 )。それまでは、一括挿入にスタイル タグを使用できます。
これは、スタイル ルールを挿入する W3C 標準の方法ですが、IE のどのバージョンでもサポートされていません: http://www.quirksmode.org/dom/w3c_css.html