ホームページ  >  記事  >  ウェブフロントエンド  >  CSSスタイルシートファイルを動的に追加するJS関数_基礎知識

CSSスタイルシートファイルを動的に追加するJS関数_基礎知識

WBOY
WBOYオリジナル
2016-05-16 17:46:281535ブラウズ

まず関数を与えます。

コードをコピー コードは次のとおりです。

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 コードの場合、



などのスタイル メソッドを呼び出すことができます。コードは次のとおりです。次のように:
varddd=document.getElementById("ddd"); ddd.style.border="1pxsolidred"; 関係ありませんそれより長い場合:


コードをコピー

コードは次のとおりです:
varddd=document.getElementById ("ddd"); ddd.style.cssText="border:1pxsolidred;color:#000;background:#444;float:left"; 個人的には後者が好きです。前者には深刻な互換性の問題があるためです。たとえば、Float スタイルは IE では styleFloat、Firefox などの W3C 標準ブラウザでは cssFloat です。そして cssText はユニバーサルです。 非常に長い場合は、CSS ファイルを動的にインポートできます。たとえば、



コードをコピーします


コードは次のとおりです。
functionaddSheetFile(path){ varfileref=document .createElement("link") fileref.rel="stylesheet"; fileref.href=path; media="screen" ; varheadobj=document.getElementsByTagName('head')[0]; headobj.appendChild(fileref)
}


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%></title><BR><%=stylesheet_link_tag"screen","button","style"%> ; <br><linkrel="stylesheet"href="/stylesheets/print.css"type="text/css"media="print"> <br><--[ifltIE8]> ><linkrel="stylesheet"href="/stylesheets/ie.css"type="text/css"media="screen"> <br><![endif]--> %=javascript_tag"window._token='#{form_authenticity_token}'"ifActionController::Base .allow_forgery_protection%> <br><%=javascript_include_tag:defaults%> <br><styletype="text/css" ="print"></style> <br></head> <br><br> <br> 上記のテストには、alert(document.styleSheets.length) が返されます。 5.したがって、拒否されました。また、外部リンクではなく、style 要素のみを使用します。 2 番目の判定は、head に style 要素が存在しない場合に作成します。次に、CSS 文字列を最初のスタイル要素に追加するだけです。 <br> 次に、安全ロックを追加する必要があります。これは、media="print" の場合、定義された効果がページの印刷時にのみ有効になるためです。最初のスタイル要素のメディア値が画面と異なることを防ぐには、それを変更する必要があります。 <br><br><br><br> </div>コードをコピーします<br><br><br> コードは次のとおりです。<div class="codetitle"><span> <a style="CURSOR: pointer" data="57224" class="copybut" id="copybut57224" onclick="doCopy('code57224')">varstyleElement=styleElements[0]; >varmedia= styleElement.getAttribute("メディア"); <u>if(media!=null&&!/screen/.test(media.toLowerCase())){ </u>styleElement.setAttribute("メディア","スクリーン") ); </a>} </span></div> <div class="codebody" id="code57224"> メディアからの指示をいくつか添付します。 <br> 画面 (デフォルト値)、コンピューター画面に送信、<br> 投影、プロジェクターに送信、<br> 点字、エンボス文字 触覚検知デバイス、<br>、tty、テレタイプライター(固定フォントを使用)、<br>、テレビ、すべての出力デバイス。 <br> 最後に追加された質問はこれです。ブラウザには、IE、Firefox、その他のブラウザの 3 種類があります。ブラウザーの決定には、独自のプライベート プロパティまたはメソッドも使用されます。たとえば、styleSheet は IE によってのみ使用され、getBoxObjectFor は Firefox によってのみ使用されます (もちろん、(/firefox/.test(navigator.userAgent.toLowerCase())) を使用することもできます)。プライベートを使用できる場合はプライベートを使用してください。 </div> <br><br><br>コードをコピーします。<br><br><br> コードは次のとおりです。<div class="codebody" id="code77114"> <br>addSheet(" <br>.RTE_iframe{width:600px;height:300px;} <br>.RTE_toolbar{width:600px;} <br>.color_result{width:216px;} <br>. color_view{幅:110px;高さ:25px;} <br>.color_code{text-align:center;font-weight:700;color:blue;font-size:16px;} <br>div.table{width:176px ;position:absolute;padding:1px;} <br>div.tabletd{font-size:12px;color:red;text-align:center;} <br>");*/ <br> のカスタマー サービスを比較する51js Guoguo スクリプトは短いですが、複数のスタイル要素を作成する可能性があり、効率の問題もいくつかあります... 結局のところ、これは元々リッチ テキスト編集用に開発したものであり、十分強力ではありません。 <br>/* <br>スタイル シートを動的に追加するためのルール<br>*/ <br>iCSS={add:function(css){ <br>varD=document,$=D.createElement('style'); <br>$.setAttribute("type","text/css"); <br>$.styleSheet&&($.styleSheet.cssText=css)|| <br>$.appendChild(D.createTextNode(css)); <br>D.getElementsByTagName('head')[0].appendChild($); <br>iCSS.add(" <br>.dhoooListBox,.dhoooListBoxli{margin:0;padding:0 ;list-style-type:none;font-size:12px;cursor:default} <br>.dhoooListBox{border:1pxsolid#aaa;width:180px;background:#eee;height:200px;overflow:auto;float: left} <br>.dhoooListBoxli{margin:5px;line-height:24px;background:url(images/smilies/time.gif)no-repeat060%;padding-left:25px;color:#555;} <br> .dhoooListBoxli.selected{background-color:#FFCC33} <br>"); <br> 最後に、関連するメソッドをいくつか追加します: <br>vargetClass=function(ele){ <br>returnele.className.replace(/s) /,'').split(''); <br>varhasClass=function(ele,cls){ <br>returnele.className.match(newRegExp('(s|^)' cls '( s|$)')); <br>} <br>varaddClass=function(ele,cls){ <br>if(!this.hasClass(ele,cls))ele.className ="" cls; } <br>varremoveClass=function(ele,cls){ <br>if(hasClass(ele,cls)){ <br>varreg=newRegExp('(s|^)' cls '(s|$)'); <br>ele.className=ele.className.replace(reg,'') <br>} <br>} <br><br> </div></span></div></div><div class="nphpQianMsg"><div class="clear"></div></div><div class="nphpQianSheng"><span>声明:</span><div>この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。</div></div></div><div class="nphpSytBox"><span>前の記事:<a class="dBlack" title="jQueryはstyle_jqueryで背景色の属性値/色の値を取得します。" href="http://m.php.cn/ja/faq/18321.html">jQueryはstyle_jqueryで背景色の属性値/色の値を取得します。</a></span><span>次の記事:<a class="dBlack" title="jQueryはstyle_jqueryで背景色の属性値/色の値を取得します。" href="http://m.php.cn/ja/faq/18323.html">jQueryはstyle_jqueryで背景色の属性値/色の値を取得します。</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>関連記事</h2><em><a href="http://m.php.cn/ja/article.html" class="bBlack"><i>続きを見る</i><b></b></a></em><div class="clear"></div></div><ul class="nphpXgwzList"><li><b></b><a href="http://m.php.cn/ja/faq/1609.html" title="Bootstrap リスト グループ コンポーネントの詳細な分析" class="aBlack">Bootstrap リスト グループ コンポーネントの詳細な分析</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/1640.html" title="JavaScript関数のカリー化の詳細説明" class="aBlack">JavaScript関数のカリー化の詳細説明</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/1949.html" title="JS パスワードの生成と強度検出の完全な例 (デモ ソース コードのダウンロード付き)" class="aBlack">JS パスワードの生成と強度検出の完全な例 (デモ ソース コードのダウンロード付き)</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/2248.html" title="Angularjs は WeChat UI (weui) を統合します" class="aBlack">Angularjs は WeChat UI (weui) を統合します</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/2351.html" title="JavaScript を使用して繁体字中国語と簡体字中国語をすばやく切り替える方法と、簡体字中国語と繁体字中国語の切り替えをサポートする Web サイトのトリック_javascript スキル" class="aBlack">JavaScript を使用して繁体字中国語と簡体字中国語をすばやく切り替える方法と、簡体字中国語と繁体字中国語の切り替えをサポートする Web サイトのトリック_javascript スキル</a><div class="clear"></div></li></ul></div></div><div class="nphpFoot"><div class="nphpFootBg"><ul class="nphpFootMenu"><li><a href="http://m.php.cn/ja/"><b class="icon1"></b><p>ホームページ</p></a></li><li><a href="http://m.php.cn/ja/course.html"><b class="icon2"></b><p>コース</p></a></li><li><a href="http://m.php.cn/ja/wenda.html"><b class="icon4"></b><p>に質問</p></a></li><li><a href="http://m.php.cn/ja/login"><b class="icon5"></b><p>私の</p></a></li><div class="clear"></div></ul></div></div><div class="nphpYouBox" style="display: none;"><div class="nphpYouBg"><div class="nphpYouTitle"><span onclick="$('.nphpYouBox').hide()"></span><a href="http://m.php.cn/ja/"></a><div class="clear"></div></div><ul class="nphpYouList"><li><a href="http://m.php.cn/ja/"><b class="icon1"></b><span>ホームページ</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/course.html"><b class="icon2"></b><span>コース</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/article.html"><b class="icon3"></b><span>記事</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/wenda.html"><b class="icon4"></b><span>に質問</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/dic.html"><b class="icon6"></b><span>辞書</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/course/type/99.html"><b class="icon7"></b><span>マニュアル</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/xiazai/"><b class="icon8"></b><span>ダウンロード</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/faq/zt" title="特集"><b class="icon12"></b><span>特集</span><div class="clear"></div></a></li><div class="clear"></div></ul></div></div><div class="nphpDing" style="display: none;"><div class="nphpDinglogo"><a href="http://m.php.cn/ja/"></a></div><div class="nphpNavIn1"><div class="swiper-container nphpNavSwiper1"><div class="swiper-wrapper"><div class="swiper-slide"><a href="http://m.php.cn/ja/" >ホームページ</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/article.html" class="hover">記事</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/wenda.html" >に質問</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/course.html" >コース</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/faq/zt" >特集</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/xiazai" >ダウンロード</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/game" >ゲーム</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/dic.html" >辞書</a></div><div class="clear"></div></div></div><div class="langadivs" ><a href="javascript:;" class="bg4 bglanguage"></a><div class="langadiv" ><a onclick="javascript:setlang('zh-cn');" class="language course-right-orders chooselan " href="javascript:;"><span>简体中文</span><span>(ZH-CN)</span></a><a onclick="javascript:setlang('en');" class="language course-right-orders chooselan " href="javascript:;"><span>English</span><span>(EN)</span></a><a onclick="javascript:setlang('zh-tw');" class="language course-right-orders chooselan " href="javascript:;"><span>繁体中文</span><span>(ZH-TW)</span></a><a onclick="javascript:;" class="language course-right-orders chooselan chooselanguage" href="javascript:;"><span>日本語</span><span>(JA)</span></a><a onclick="javascript:setlang('ko');" class="language course-right-orders chooselan " href="javascript:;"><span>한국어</span><span>(KO)</span></a><a onclick="javascript:setlang('ms');" class="language course-right-orders chooselan " href="javascript:;"><span>Melayu</span><span>(MS)</span></a><a onclick="javascript:setlang('fr');" class="language course-right-orders chooselan " href="javascript:;"><span>Français</span><span>(FR)</span></a><a onclick="javascript:setlang('de');" class="language course-right-orders chooselan " href="javascript:;"><span>Deutsch</span><span>(DE)</span></a></div></div><script> var swiper = new Swiper('.nphpNavSwiper1', { slidesPerView : 'auto', observer: true,//修改swiper自己或子元素时,自动初始化swiper observeParents: true,//修改swiper的父元素时,自动初始化swiper }); </script></div></div><!--顶部导航 end--><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.length ){ //如果已经获取到了,就直接执行函数 func && func.call(this); } else { _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); } _times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 if( _self.length ) { //判断是否取到 func && func.call(_self); clearInterval(_iIntervalID); } }, _interval); } return this; } $("table.syntaxhighlighter").wait(function() { $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>"); }); $(document).on("click", ".cnblogs_code_footer",function(){ $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide(); }); $('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}}); </script></body></html>