まず関数を与えます。
varaddSheet=function(){
vardoc,cssCode ;
if(arguments.length==1){
doc=document;
cssCode=arguments[0]
}elseif(arguments.length==2){
doc=arguments [0];
cssCode=arguments[1];
alert("addSheet 関数は最大 2 つのパラメータを受け入れます!"); "v1" ){//自動変換透明機能を追加します。ユーザーは W3C 透明スタイルを入力するだけで、IE の透明フィルター
vart=cssCode.match(/opacity:(d?. d );/) ;
if(t!=null){
cssCode=cssCode.replace(t[0],"filter:alpha(opacity=" parseFloat(t[1])*100 ") ")
}
}
cssCode=cssCode " ";//firebug で見やすくするために最後に改行文字を追加します。
varheadElement=doc.getElementsByTagName("head")[0];
varstyleElements=headElement.getElementsByTagName("style");
if(styleElements.length==0){// スタイルが一致しない場合要素が作成されます
if(doc.createStyleSheet){//ie
doc.createStyleSheet();
}else{
vartempStyleElement=doc.createElement('style');//w3c
tempStyleElement.setAttribute("type","text/css");
headElement.appendChild(tempStyleElement);
}
}
varstyleElement=styleElements[0]; styleElement .getAttribute("media");
if(media!=null&&!/screen/.test(media.toLowerCase())){
styleElement.setAttribute("media","screen"); 🎜 >}
if(styleElement.styleSheet){//ie
styleElement.styleSheet.cssText =cssCode;
}elseif(doc.getBoxObjectFor){
styleElement.innerHTML =cssCode;//Firefoxサポート スタイル シート文字列を innerHTML に直接追加します。
}else{
styleElement.appendChild(doc.createTextNode(cssCode))
}
}
場合によっては、 add .js このファイルは、ドキュメントにいくつかの CSS スタイルを動的に導入します。一部の短い CSS コードの場合、
などのスタイル メソッドを呼び出すことができます。コードは次のとおりです。次のように:
コードをコピー
コードは次のとおりです:
コードをコピーします
コードは次のとおりです。
}
IEでは少し面倒です。私は常に、サポートされているブラウザのネイティブ関数を使用してきましたが、バイナリ コードを直接使用するのが最も効率的です。
コードをコピー
コードは次のとおりです。
varoStylesheet=document.createStyleSheet(sURL,iIndex) );
createStyleSheet の 2 つのパラメーターはオプションです。
しかし、スタイルが特定のページに固有で管理者のみが使用でき、ページのその部分が動的に生成される場合、最初からそれを導入する必要があるでしょうか?ロードするには特別なファイルを作成する必要がありますか?最善の方法は、これらのスタイルを動的スクリプトにバンドルすることです。この機能はこの目的のために開発されました。
率直に言って、これは元々リッチテキストエディター用に開発されました。ご存知のとおり、リッチ テキスト入力ボックスを使用する最も一般的な方法は、入力するコンテンツを iframe に配置することです。これには、メイン ページのドキュメントとドキュメントの 2 種類のドキュメントが必要です。 iframe の。 iframe のドキュメントには互換性の問題もあります。
variframe=document.createElement('iframe');// 編集用のリッチテキストエディタを生成します
variframeDocument=iframe.contentDocument||iframe.contentWindow.document;
.... そうですね、遠すぎます。全体として、関数の最初の判断はこれら 2 つの文書に対して準備されています。 iframe が関与していない場合は、パラメーターを 1 つ渡すだけで済みます。最後のパラメータは常に CSS 文字列です。
次に、styleSheet 要素を動的に生成し、この要素に CSS 文字列を追加するという問題があります。もちろん、現段階で存在する場合は既製品を使用してください。 DOM 要素が増えると、ブラウザの負担も大きくなります。 document.styleSheets メソッドを考えます。これはスタイル要素やリンク要素を含むコレクションを返します。また、次のような互換性の問題も伴います。
"http://www.w3.org/TR/xhtml1/DTD /xhtml1-transitional.dtd">
<%# IE8 に IE7 のように Web ページを表示させる -%>
<%# --デフォルトでは、すべてのリンクがこのウィンドウで開かれます-%>
<%=h(yield(:title))||controller .action_name%><%=stylesheet_link_tag"screen","button","style"%> ;
<--[ifltIE8]> >
%=javascript_tag"window._token='#{form_authenticity_token}'"ifActionController::Base .allow_forgery_protection%>
<%=javascript_include_tag:defaults%>
上記のテストには、alert(document.styleSheets.length) が返されます。 5.したがって、拒否されました。また、外部リンクではなく、style 要素のみを使用します。 2 番目の判定は、head に style 要素が存在しない場合に作成します。次に、CSS 文字列を最初のスタイル要素に追加するだけです。
次に、安全ロックを追加する必要があります。これは、media="print" の場合、定義された効果がページの印刷時にのみ有効になるためです。最初のスタイル要素のメディア値が画面と異なることを防ぐには、それを変更する必要があります。
コードをコピーします
コードは次のとおりです。 メディアからの指示をいくつか添付します。
画面 (デフォルト値)、コンピューター画面に送信、
投影、プロジェクターに送信、
点字、エンボス文字 触覚検知デバイス、
、tty、テレタイプライター(固定フォントを使用)、
、テレビ、すべての出力デバイス。
最後に追加された質問はこれです。ブラウザには、IE、Firefox、その他のブラウザの 3 種類があります。ブラウザーの決定には、独自のプライベート プロパティまたはメソッドも使用されます。たとえば、styleSheet は IE によってのみ使用され、getBoxObjectFor は Firefox によってのみ使用されます (もちろん、(/firefox/.test(navigator.userAgent.toLowerCase())) を使用することもできます)。プライベートを使用できる場合はプライベートを使用してください。
コードをコピーします。
コードは次のとおりです。
addSheet("
.RTE_iframe{width:600px;height:300px;}
.RTE_toolbar{width:600px;}
.color_result{width:216px;}
. color_view{幅:110px;高さ:25px;}
.color_code{text-align:center;font-weight:700;color:blue;font-size:16px;}
div.table{width:176px ;position:absolute;padding:1px;}
div.tabletd{font-size:12px;color:red;text-align:center;}
");*/
のカスタマー サービスを比較する51js Guoguo スクリプトは短いですが、複数のスタイル要素を作成する可能性があり、効率の問題もいくつかあります... 結局のところ、これは元々リッチ テキスト編集用に開発したものであり、十分強力ではありません。
/*
スタイル シートを動的に追加するためのルール
*/
iCSS={add:function(css){
varD=document,$=D.createElement('style');
$.setAttribute("type","text/css");
$.styleSheet&&($.styleSheet.cssText=css)||
$.appendChild(D.createTextNode(css));
D.getElementsByTagName('head')[0].appendChild($);
iCSS.add("
.dhoooListBox,.dhoooListBoxli{margin:0;padding:0 ;list-style-type:none;font-size:12px;cursor:default}
.dhoooListBox{border:1pxsolid#aaa;width:180px;background:#eee;height:200px;overflow:auto;float: left}
.dhoooListBoxli{margin:5px;line-height:24px;background:url(images/smilies/time.gif)no-repeat060%;padding-left:25px;color:#555;}
.dhoooListBoxli.selected{background-color:#FFCC33}
");
最後に、関連するメソッドをいくつか追加します:
vargetClass=function(ele){
returnele.className.replace(/s) /,'').split('');
varhasClass=function(ele,cls){
returnele.className.match(newRegExp('(s|^)' cls '( s|$)'));
}
varaddClass=function(ele,cls){
if(!this.hasClass(ele,cls))ele.className ="" cls; }
varremoveClass=function(ele,cls){
if(hasClass(ele,cls)){
varreg=newRegExp('(s|^)' cls '(s|$)');
ele.className=ele.className.replace(reg,'')
}
}