$.getScript('ajax/test.js', function() {
alert('Load was performed.');
});
..リクエストに応じて外部JSをロードする上記のコードのように、必要に応じて外部CSSスタイルシートをロードするために利用可能な同様のものがありますか?
たとえば、サイトでライトボックス(インラインポップアップ)を使用する場合と同様に、ユーザーの要求がない限り、ライトボックスJSおよびCSSファイルをロード時にロードしないようにします。
ありがとう
はい:スタイルシートにリンクする_<link>
_タグを作成し、それを_<head>
_タグに追加すると、ブラウザはそのスタイルシートをロードします。
例えば。
_$('head').append('<link rel="stylesheet" type="text/css" href="lightbox_stylesheet.css">');
_
ただし、、 @ peteorpeterのコメントによる 、これはIE 8では機能しませんまたは下—そこには、次のいずれかが必要です。
<link>
_beforeを追加して、そのhref
;を設定します。またはdocument.createStyleSheet()
メソッドを使用しますまた、リンクが既に追加されているかどうかを確認することは、すべてのブラウザーで確実に機能しません。
私もあなたの前提の一部に質問します:
ユーザーの要求がない限り、ライトボックスJSおよびCSSファイルをロード時にロードしないようにします。
どうして?ページの重量を減らすには?願望は理解できますが、CSSファイルとJSファイルのサイズを(縮小化とgzip圧縮後)そこにあるライトボックスコードで測定し、削減する価値があるかどうかを確認する必要があります。
縮小とgzipの後、それほど大きな違いはないかもしれません。
また、CSSとJSを長時間キャッシュするようにブラウザーに指示できることを覚えておいてください。つまり、ユーザーが空のキャッシュでサイトにアクセスしたときにのみダウンロードされます。
$('<link/>', {rel: 'stylesheet', href: 'myHref'}).appendTo('head');
できること:
$('<link>').attr('rel','stylesheet')
.attr('type','text/css')
.attr('href','link_to.css')
.appendTo('head');
ヘッドに動的HTMLコンテンツを追加するだけで、外部スタイルシートへの参照を追加できます。
$('head').append('<link rel="stylesheet" href="style.css" type="text/css" />');
このコンテンツはDOMに挿入され、その後正常にレンダリングされます。この場合、外部スタイルシートのフェッチが発生します。
ただし、静的コンテンツの動的な読み込みに注意を払っていない場合、ページの読み込み時間と過剰なリソース転送にコストがかかる可能性があるため、cletusの回答にも注意してください。
IEの問題...
IE 6,7,8でクラッシュしました
$('head').append( $('<link rel="stylesheet" type="text/css" />').attr('href', 'assets/css/jquery.fancybox-1.3.4.css') );
別のhttp req、出来上がりを避けるために、それらをメインシートにコピーしました。
一般的に、あなたが正しくそうしていると仮定するのに必要なものすべてを含めるほうが良いでしょう。
つまり、静的コンテンツ(画像、Javascript、CSS)のベストプラクティスは次のとおりです。
そのため、ユーザーは、指定されたファイルが変更されるまで一度しかダウンロードしません。
CSSとJavascriptを動的にロードすることは、例外的に大きくない限り、通常は保証されず、逆効果です。
直接追加できます
$("head").append($("<link rel='stylesheet' href='style.css' type='text/css' media='screen' />"));