如何动态加载外部CSS与JS文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何动态加载外部CSS与JS文件相关的知识,希望对你有一定的参考价值。

动态加载外部CSS与JS文件使用dom创建<script>或者<link>标签,并给他们附加属性,如type等。然后使用appendChild方法把标签绑定到另一个标签,一般是绑到<head>。求详细点的代码,比如说什么什么写在那里什么什么怎么用之类的,我是菜鸟,求高手指教!

动态加载外部css样式及css样式,参考代码如下:

// 动态加载外部js文件 
var flag = true; 
if( flag ) 
loadScript( "js/index.js" ); 

function loadScript( url ) 
var script = document.createElement( "script" ); 
script.type = "type/javascipt"; 
script.src = url; 
document.getElementsByTagName( "head" )[0].appendChild( script ); 

// 动态加载js 
if( flag ) 
var script = document.createElement( "script" ); 
script.type = "text/javascript"; 
script.text = " "; 
document.getElementsByTagName( "head" )[0].appendChild( script ); 

// 动态加载外部css样式 
if( flag ) 
loadCss( "css/base.css" ); 

function loadCss( url ) 
var link = document.createElement( "link" ); 
link.type = "text/css"; 
link.rel = "stylesheet"; 
link.href = url; 
document.getElementsByTagName( "head" )[0].appendChild( link ); 

// 动态加载css样式 
if( flag ) 
var style = document.createElement( "style" ); 
style.type = "text/css"; 
document.getElementsByTagName( "head" )[0].appendChild( style ); 
var sheet = document.styleSheets[0]; 
insertRules( sheet,"#gaga1","background:#f00",0 ); 

function insertRules( sheet,selectorTxt,cssTxt,position ) 
if( sheet.insertRule ) // 判断非IE浏览器 
sheet.insertRule( selectorTxt + "" + cssTxt +"" ,position ); 
else if( sheet.addRule ) //判断是否是IE浏览器 
sheet.addRule( selectorTxt ,cssTxt ,position ) 
 
参考技术A <link rel="stylesheet" type="text/css" href="/css/common.css" />

<script src="/include/js/menu.js" type="text/javascript" language="javascript"></script>

照着这个样子写就是了,主要的就是指定好你存放CSS和JS的路径,可以使用相对路径,就如我这样
也可以说使用绝对路径,就比如c:/include/js/menu.js追问

不是这个啊。这个我知道的!

参考技术B 动态加载js:
function loadScript(url,callback)
var script = document.createElement('script');
script.type= "text/javascript";
if(script.readyState)// IE
script.onreadystatechange = function()
if(script.readyState == 'loaded' || script.readyState == 'complete')
script.onreadystatechange = null;
callback();


else // !IE
script.onload = function()
callback();


script.src = url;
document.getElementsByTagName('head')[0].appendChild(script);

动态加载css,<style>的 onload 事件有兼容性问题,所以没法判断是否加载完了,不过问题不大,因为是样式么。
function loadStyle(url)
var link = document.createElement('link');
link.type= "text/css";
link.href = url;
link.rel ="stylesheet";
document.getElementsByTagName('head')[0].appendChild(link);


就这样,动态加载不阻塞。追问

怎么还是不行啊!是新建一个JS文件 然后在页面上导这个文件 就可以了么 。还是要怎么写啊!?

参考技术C 我觉得你的意思是不是动态的应用样式? 用轻量级 JavaScript 库JQuery就简单了..
举例:<tr onMouseOver='chooseOver(this)' onMouseOut='chooseOut(this)' ><td colspan='2'>选中这行CSS样式改变</td></tr>

JS文件:
function chooseOver(obj)
$(obj).addClass("mycss_1");

function chooseOut(obj)
$(obj).removeClass("mycss_1");


CSS:
.mycss_1 color:#F00; background-color:#FC9;
这样就是鼠标移上去自动添加样式,移走的时候去掉样式...JQuery很简单 去下载个手册看看
当然 你纯javascript代码也行 不过自己没写过肯定比较繁琐... 强烈推荐JQuery 真方便追问

额,不是,是自动加载那个导入CSS或者JS的语句!

参考技术D (function()
xe = window.xe || ;
xe.load =
filesAdded : ,
loadScript : function(src)
if(this.filesAdded[src])
return 0;

var script = document.createElement('script');
script.type = 'text/javascript';
script.src = src;
this.filesAdded[src] = true;
document.body.appendChild(script);
,
loadScriptString : function(code)
var script = document.createElement('script');
script.type = 'text/javascript';
try
script.appendChild(document.createTextNode(code));
catch(ex)
script.text = code;

document.body.appendChild(script);
,
loadCss : function(href)
if(this.filesAdded[href])
return 0;

var link = document.createElement('link');
link.type = 'text/css';
link.rel = 'stylesheet';
link.href = href;
this.filesAdded[href] = true;
document.getElementsByTagName('head')[0].appendChild(link);
,
loadCssString : function(code)
var style = document.createElement('style');
style.type = 'text/css';
try
style.appendChild(document.createTextNode(code));
catch(ex)
style.styleSheet.cssText = code;

document.getElementsByTagName('head')[0].appendChild(style);

;
)();追问

额,怎么没反映哦!我试了下!还是没导入哦!难道我是写的地方不对吗?

追答

xe.load.loadCss('xxxxx.css')

追问

什么?不懂!

追答

比如你要加载test.css文件到页面里,就调用xe.load.loadCss('test.css')就行了

追问

- -\\ 那js文件呢 是不是每个页面都要写xe.load.loadCss('xxxxx.css')这个啊!怎么在页面上写的哦!

追答

我去,推荐答案都已经选了,我不回答了,你自己去看吧

追问

没选嘛!我谁也没选啊!

本回答被提问者采纳

动态加载js和css

一、动态加载CSS
动态创建css样式有两种方式:
1、动态插入css外部文件的方法:
function loadStyle(url){
  var link = document.createElement(‘link‘);
    link.type = ‘text/css‘;
    link.rel = ‘stylesheet‘;
    link.href = url;
    var head = document.getElementsByTagName(‘head‘)[0];
    head.appendChild(link);
}
loadStyle(‘test.css‘);

2、动态加载css代码片段

function loadCssCode(code){
var style = document.createElement(‘style‘);
    style.type = ‘text/css‘;
    style.rel = ‘stylesheet‘;
    try{
        //for Chrome Firefox Opera Safari
        style .appendChild(document.createTextNode(code));
    }catch(ex){
        //for IE
        style.styleSheet.cssText = code;
    }
    var head = document.getElementsByTagName(‘head‘)[0];
    head.appendChild(style);
}
loadCssCode(‘body{background-color:#f00}‘);

二、动态加载js

1、异步加载,并加载到前台资源库

function loadJsCallback(sid, jsurl, callback) {
 var nodeHead = document.getElementsByTagName(‘head‘)[0];
 var urlStr = jsurl.split(‘,‘);
 if(document.getElementById(sid + "JS0") == null){
  var urlLength = urlStr.length;
  for(var i = 0; i < urlStr.length; i++){
   var nodeScript = document.createElement(‘script‘);
   nodeScript.setAttribute(‘type‘, ‘text/javascript‘);
   nodeScript.setAttribute(‘src‘, urlStr[i]);
   nodeScript.setAttribute(‘id‘, sid + ‘JS‘ + i);
   if(callback != null){
    nodeScript.onload = nodeScript.onreadystatechange = function(curTarget) {
     if(nodeScript.ready){
      return false;
     }
     if(!nodeScript.readyState || nodeScript.readyState == "loaded"
       || nodeScript.readyState == ‘complete‘){
      urlLength -= 1;
      if(0 != urlLength){
       return false;
      }else{
       nodeScript.ready = true;
       callback();
      }
     }
    };
   }
   nodeHead.appendChild(nodeScript);
  }
 }else{
  if(callback != null){
   callback();
  }
 }
}

 
































































以上是关于如何动态加载外部CSS与JS文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在js文件中动态加载另一个js文件?

如何动态加载外部 CSS 文件?

如何在js文件中动态加载另一个js文件?

动态加载js和css

用原生js怎么动态添加一个js文件

如何动态加载html文件并在其中执行外部js