JavaScriptのダイナミックロードスクリプトとスタイル


この章では、前の章の残りの場所を把握するためのDOM方法、動的なシナリオとスタイルを説明します.
一.元素の位置の前の章はいくつかの属性を通して元素の必要な位置を取得できました.この課はDOMを追加する方法:get BoundingClienntRect()です.この方法は長方形オブジェクトを返します.4つの属性を含みます.left、top、right、bottom.元素の各辺とページの上と左側の距離をそれぞれ表します.

  
  
  
  
  1. var box = document.getElementById('box'); //  
  2. alert(box.getBoundingClientRect().top); //  
  3. alert(box.getBoundingClientRect().right); //  
  4. alert(box.getBoundingClientRect().bottom); //  
  5. alert(box.getBoundingClientRect().left); //  
PS:IE、Firefox 3+、Opera 9.5、Chrome、Safariサポート、IEではデフォルト座標が(2、2)から計算され、最終距離が他のブラウザよりも2つのピクセル多くなるため、互換性が必要です.

  
  
  
  
  1. document.documentElement.clientTop; // IE  0,IE  2 
  2. document.documentElement.clientLeft; // IE  0,IE  2 
  3. function getRect(element) { 
  4. var rect = element.getBoundingClientRect(); 
  5. var top = document.documentElement.clientTop; 
  6. var left = document.documentElement.clientLeft; 
  7. return { 
  8. top : rect.top - top, 
  9. bottom : rect.bottom - top, 
  10. left : rect.left - left, 
  11. right : rect.right - left 
PS:外部データ、内縁、外枠、スクロールバーをそれぞれ加えて、すべてのブラウザが一致するかどうかをテストします.
二.ダイナミックスクリプトはウェブサイトの需要が大きくなり、シナリオの需要もだんだん大きくなります.私たちはJSスクリプトをたくさん導入して、ステーション全体の性能を低下させなければなりません.だから、ダイナミックスクリプトの概念が現れて、適時に相応のスクリプトをロードします.例えば、ブラウザをチェックする必要がある時に、検査ファイルを導入したいです.

  
  
  
  
  1. var flag = true// true   
  2. if (flag) { 
  3. loadScript('browserdetect.js'); // js 
  4. function loadScript(url) { 
  5. var script = document.createElement('script'); 
  6. script.type = 'text/javascript'
  7. script.src = url; 
  8. //document.head.appendChild(script); //document.head  <head> 
  9. document.getElementsByTagName('head')[0].appendChild(script); 
PS:document.head呼び出し、IEはサポートされていません.エラーを報告します.

  
  
  
  
  1. // js 
  2. var script = document.createElement('script'); 
  3. script.type = 'text/javascript'
  4. var text = document.createTextNode("alert('Lee')"); //IE   
  5. script.appendChild(text); 
  6. document.getElementsByTagName('head')[0].appendChild(script); 
PS:IEブラウザは、scriptが特別な要素であり、サブノードにアクセスできないと考えています.互換性のために、text属性を使って代替できます.

  
  
  
  
  1. script.text = "alert('')"//IE  。 
PS:もちろん、textがサポートされていないなら、異なるブラウザの特性に対して異なる方法を使うことができます.ここでは書き方を無視します.
三.ダイナミックスタイルは、ウェブサイトの皮膚を切り換えるなど、ダイナミックなスタイル表を読み込むために.スタイルシートには2つの方法があります.もう一つは「link」ラベル、もう一つは「style」ラベルです.

  
  
  
  
  1. // link 
  2. var flag = true
  3. if (flag) { 
  4. loadStyles('basic.css'); 
  5. function loadStyles(url) { 
  6. var link = document.createElement('link'); 
  7. link.rel = 'stylesheet'
  8. link.type = 'text/css'
  9. link.href = url; 
  10. document.getElementsByTagName('head')[0].appendChild(link); 
  11. // style 
  12. var flag = true
  13. if (flag) { 
  14. var style = document.createElement('style'); 
  15. style.type = 'text/css'
  16. //var box= document.createTextNode(#box{red}'); IE  < /span> 
  17. //style.appendChild(box); 
  18. document.getElementsByTagName('head')[0].appendChild(style); 
  19. insertRule(document.styleSheets[0], '#box''red'< /span>, 0); 
  20. function insertRule(sheet, selectorText, cssText, position) { 
  21. // IE 
  22. if (sheet.insertRule) { 
  23. sheet.insertRule(selectorText + "{" + cssText + "}", position); 
  24. // IE 
  25. else if (sheet.addRule) { 
  26. sheet.addRule(selectorText, cssText, position);