使javascript也能包含文件
javascript功能強(qiáng)大,但一個(gè)問題是它不能包含其它的js文件,而其它非腳本語言卻基本都是有這個(gè)功能的,不得不覺得有點(diǎn)遺憾。窮則思變,越來越發(fā)現(xiàn)不動(dòng)態(tài)導(dǎo)入文件會(huì)嚴(yán)重加大加載頁面的時(shí)間,經(jīng)過實(shí)驗(yàn),發(fā)現(xiàn)了一個(gè)辦法,利用xhtml來實(shí)現(xiàn)這個(gè)功能,下面的函數(shù)就可以動(dòng)態(tài)導(dǎo)入javascript文件和css樣式文件:
function $import(path,type,title){
var s,i;
if(type=="js"){
var ss=document.getElementsByTagName("script");
for(i=0;i<ss.length;i++){
if(ss[i].src && ss[i].src.indexOf(path)!=-1)return;
}
s=document.createElement("script");
s.type="text/javascript";
s.src=path;
}else if(type=="css"){
var ls=document.getElementsByTagName("link");
for(i=0;i<ls.length;i++){
if(ls[i].href && ls[i].href.indexOf(path)!=-1)return;
}
s=document.createElement("link");
s.rel="alternate stylesheet";
s.type="text/css";
s.href=path;
s.title=title;
s.disabled=false;
}
else return;
var head=document.getElementsByTagName("head")[0];
head.appendChild(s);
}
對于樣式文件,默認(rèn)導(dǎo)入后是立即生效的,這有可能會(huì)導(dǎo)致和前面一種選定樣式效果重疊,造成混亂。所以在我的blog中是使用下面的函數(shù)來實(shí)現(xiàn)樣式的切換功能:
function setStyle(title) {
var i, links,eflag=false;
links = document.getElementsByTagName("link");
for(i=0; links[i]; i++) {
if(links[i].getAttribute("rel").indexOf("style") != -1 && links[i].getAttribute("title")) {
links[i].disabled = true;
if(links[i].getAttribute("title").indexOf(title) != -1){links[i].disabled = false;eflag=true;}
}
}
if(!eflag){
$import("skin/"+title+"/default.css","css",title);
setStyle(title);
}
}
最后,說明一下,因?yàn)閖avascript文件是需要從遠(yuǎn)程加載的,所以有人可能會(huì)問在調(diào)用$import()函數(shù)后,是立即執(zhí)行$import()后面的語句,還是等加載完以后再執(zhí)行其后的語句。我粗略試驗(yàn)了一下,發(fā)現(xiàn)是等加載完后再執(zhí)行后面的語句的,而且如果加載的js里有立即執(zhí)行的代碼,那么它會(huì)先于$import()后面的語句執(zhí)行。這也是我們想要的結(jié)果,因?yàn)檫@樣就可以在$import()之后調(diào)用加載的文件里的函數(shù)了。
相關(guān)文章
JS獲取鼠標(biāo)坐標(biāo)的實(shí)例方法
這篇文章介紹了JS獲取鼠標(biāo)坐標(biāo)的實(shí)例方法,有需要的朋友可以參考一下2013-07-07
js 動(dòng)態(tài)創(chuàng)建 html元素
最近在學(xué)習(xí)js 寫了個(gè)簡單的效果,菜鳥可以學(xué)習(xí)學(xué)習(xí),基本原理:使用隨即數(shù)設(shè)置top 和left的值,2009-07-07
echarts多條折線圖動(dòng)態(tài)分層的實(shí)現(xiàn)方法
這篇文章主要介紹了echarts多條折線圖動(dòng)態(tài)分層的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
JavaScript解析及序列化JSON的方法實(shí)例分析
這篇文章主要介紹了JavaScript解析及序列化JSON的方法,結(jié)合實(shí)例形式分析javascript針對json格式數(shù)據(jù)的解析、序列化等相關(guān)操作技巧,需要的朋友可以參考下2019-01-01
JavaScript省市聯(lián)動(dòng)實(shí)現(xiàn)代碼
這篇文章主要介紹了JavaScript省市聯(lián)動(dòng)實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-02-02
微信小程序發(fā)布新版本時(shí)自動(dòng)提示用戶更新的方法
這篇文章主要介紹了微信小程序發(fā)布新版本時(shí)自動(dòng)提示用戶更新的方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用小程序具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
微信小程序如何調(diào)用新聞接口實(shí)現(xiàn)列表循環(huán)
這篇文章主要介紹了微信小程序如何調(diào)用新聞接口實(shí)現(xiàn)列表循環(huán),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07

