Javascript模板
/***Template.class.js***/
functionTemplate()
{
this.classname="Template";
this.debug=false;
this.file=newHashMap();
this.root="";
this.varkeys=newHashMap();
this.varvals=newHashMap();
this.unknowns="remove";
this.halt_on_error="yes";
this.last_error="";
this.fso=newActiveXObject("Scripting.FileSystemObject");
this.set_root=_set_root;
this.set_unknowns=_set_unknowns;
this.get_var=_get_var;
this.set_file=_set_file;
this.set_var=_set_var;
this.set_block=_set_block;
this.subst=_subst;
this.parse=_parse;
this.p=_p;
this.pparse=_pparse;
this.finish=_finish;
this.loadfile=_loadfile;
this.is_dir=_is_dir;
this.file_exists=_file_exists;
this.filename=_filename;
this.varname=_varname;
this.halt=_halt;
this.haltmsg=_haltmsg;
}
/**
*@paramroot
*/
function_set_root(root)
{
if(!this.is_dir(root))
{
this.halt("set_root:"+root+"isnotadirectory.");
}
this.root=root;
}
/**
*设定对未知模板变量的处理办法
*@paramunknowns
*/
function_set_unknowns(unknowns)
{
this.unknowns=unknowns;
}
/**
*设定模板文件
*@paramhandle
*@paramfilename
*/
function_set_file(handle,filename)
{
this.file.put(handle,this.filename(filename));
}
/**
*设定模板变量
*@paramvarname
*@paramvalue
*/
function_set_var(varname,value)
{
if(!this.varkeys.containsKey(varname))
{
this.varkeys.put(varname,this.varname(varname));
}
if(!this.varvals.containsKey(varname))
{
this.varvals.put(varname,value);
}
else
{
this.varvals.remove(varname);
this.varvals.put(varname,value);
}
//alert(varname+"=================="+value);
}
/**
*设定块变量
*@paramparent
*@paramhandle
*@paramname
*/
function_set_block(parent,handle,name)
{
if(!this.loadfile(parent))
{
this.halt("subst:unabletoload"+parent);
}
if(name=="")
{
name=handle;
}
varstr=this.get_var(parent);
varre=newRegExp("([sS.]*)");
//Matcherm=p.matcher(str);
//varrs=m.find();
//vart=m.group(m.groupCount());
//this.set_var(handle,t);
vararr=re.exec(str);
if(arr!=null)
this.set_var(handle,RegExp.$1);
str=str.replace(re,"{"+name+"}");
this.set_var(parent,str);
}
/**
*进行变量替换
*@paramhandle
*@return
*/
function_subst(handle)
{
if(!this.loadfile(handle))
{
this.halt("subst:unabletoload"+handle);
}
varstr=this.get_var(handle);
varkeys=this.varkeys.keySet();
//alert(keys.length);
for(vari=0;i<keys.length;i++)
{
varkey=keys[i];
varre=newRegExp(this.varkeys.get(key),"g")
str=str.replace(re,this.varvals.get(key));
}
//alert(handle+"++++++++++++++++++"+str);
returnstr;
}
/**
*进行变量复制
*@paramtarget
*@paramhandle
*@paramappend
*/
function_parse(target,handle,append)
{
varstr=this.subst(handle);
if(append)
{
this.set_var(target,this.get_var(target)+str);
}
else
{
this.set_var(target,str);
}
}
/**
*返回替换后的文件
*@paramvarname
*@return
*/
function_p(varname)
{
returnthis.finish(this.get_var(varname));
}
/**
*parse()和p()的合并
*@paramtarget
*@paramhandle
*@paramappend
*@return
*/
function_pparse(target,handle,append)
{
e(target,handle,append);
eln(this.p(target));
}
/**
*加载模板文件
*@paramhandle
*@return
*/
function_loadfile(handle)
{
if(ainsKey(handle)&&(handle)!=null)
{
returntrue;
}
if(!ainsKey(handle))
{
_halt("loadfile:"+handle+"isnotavalidhandle.");
returnfalse;
}
varfilename=(handle);
if(!_exists(filename))
{
("loadfile:whileloading"+handle+","+filename+"doesnotexist.");
returnfalse;
}
try
{
varfr=TextFile(filename);
vars=All();
if(s=="")
{
halt("loadfile:whileloading"+handle+","+filename+"isempty.");
returnfalse;
}
_var(handle,s);
}
catch(e)
{
}
returntrue;
}
/**
*获取变量
*@paramvarname
*@return
*/
function_get_var(varname)
{
if(ainsKey(varname))
(varname);
else
return"";
}
/**
*判断目录
*@parampath
*@return
*/
function_is_dir(path)
{
if(erExists(path))
returntrue;
else
returnfalse;
}
/**
*判断文件
*@paramfilename
*@return
*/
function_file_exists(filename)
{
if(Exists(filename))
returntrue;
else
returnfalse;
}
/**
*文件名处理
*@paramfilename
*@return
*/
function_filename(filename)
{
if(!_exists(+filename))
{
("filename:file"+filename+"doesnotexist.");
}
+filename;
}
/**
*变量名处理
*@paramvarname
*@return
*/
function_varname(varname)
{
return"{"+varname+"}";
}
/**
*完成字符串的处理
*@paramstr
*@return
*/
function_finish(str)
{
varre=newRegExp("{[^trn}]+}","g");
if(owns=="remove")
{
str=ace(re,"");
}
elseif(owns=="comment")
{
str=ace(re,"");
}
else
{
}
returnstr;
}
function_halt(msg)
{
_error=msg;
if(_on_error!="no")
{
_haltmsg(msg);
}
if(_on_error=="yes")
{
alert("Halted.");
//(0);
}
}
function_haltmsg(msg)
{
alert("TemplateError:"+msg);
}
/**
*HashMap构造函数
*/
functionHashMap()
{
th=0;
ix="hashmap_prefix_20050524_";
}
/**
*向HashMap中添加键值对
*/
=function(key,value)
{
this[ix+key]=value;
th++;
}
/**
*从HashMap中获取value值
*/
=function(key)
{
returntypeofthis[ix+key]=="undefined"
?null:this[ix+key];
}
/**
*从HashMap中获取所有key的'集合,以数组形式返回
*/
et=function()
{
vararrKeySet=newArray();
varindex=0;
for(varstrKeyinthis)
{
if(tring(0,th)==ix)
arrKeySet[index++]=tring(th);
}
th==0?null:arrKeySet;
}
/**
*从HashMap中获取value的集合,以数组形式返回
*/
es=function()
{
vararrValues=newArray();
varindex=0;
for(varstrKeyinthis)
{
if(tring(0,th)==ix)
arrValues[index++]=this[strKey];
}
th==0?null:arrValues;
}
/**
*获取HashMap的value值数量
*/
=function()
{
th;
}
/**
*删除指定的值
*/
ve=function(key)
{
this[ix+key];
th--;
}
/**
*清空HashMap
*/
r=function()
{
for(varstrKeyinthis)
{
if(tring(0,th)==ix)
this[strKey];
}
th=0;
}
/**
*判断HashMap是否为空
*/
pty=function()
{
th==0;
}
/**
*判断HashMap是否存在某个key
*/
ainsKey=function(key)
{
for(varstrKeyinthis)
{
if(strKey==ix+key)
returntrue;
}
returnfalse;
}
/**
*判断HashMap是否存在某个value
*/
ainsValue=function(value)
{
for(varstrKeyinthis)
{
if(this[strKey]==value)
returntrue;
}
returnfalse;
}
/**
*把一个HashMap的值加入到另一个HashMap中,参数必须是HashMap
*/
ll=function(map)
{
if(map==null)
return;
if(tructor!=JHashMap)
return;
vararrKey=et();
vararrValue=es();
for(variinarrKey)
(arrKey[i],arrValue[i]);
}
//toString
ring=function()
{
varstr="";
for(varstrKeyinthis)
{
if(tring(0,th)==ix)
str+=tring(th)
+":"+this[strKey]+"rn";
}
returnstr;
}
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"
"..
{HEAD}
{WELCOME}
{NUMBER} |
{FOOT}
vartmplt=newTemplate();
varroot=location.href;
root=unescape(root.substring(8,root.lastIndexOf("/")+1));
tmplt.set_root(root);
tmplt.set_file("fh","tpl/main.htm");
tmplt.set_file("head","tpl/head.htm");
tmplt.set_file("foot","tpl/foot.htm");
tmplt.set_block("fh","BROWS","rows");
tmplt.set_block("BROWS","BCOLS","cols");
tmplt.set_var("WELCOME","欢迎光临");
for(vari=0;i<10;i++)
{
tmplt.set_var("cols","");
for(varj=0;j<10;j++)
{
tmplt.set_var("NUMBER",i+"."+j);
tmplt.parse("cols","BCOLS",true);
}
tmplt.parse("rows","BROWS",true);
}
tmplt.parse("HEAD","head",false);
tmplt.parse("FOOT","foot",false);
tmplt.pparse("out","fh",false);
-
关于JavaScript学习笔记之Cookie对象
JavaScriptCookieCookie对象:Cookie是一种以文件的形式保存在客户端硬盘的Cookies文件夹中的'用户数据信息(Cookie数据)。Cookie文件由所访问的Web站点建立,以长久的保存客户端与Web站点间的会话数据,并且该Cookie数据只允许被所访问的Web站点进行读取。Cookie文...
-
针对dom元素的分析应用
如果这个DOM元素没有样式也就谈不上操作了。2.我们也可以直接用JS动态的向html里写入DOM元素。今天这章我们就讲这两个应用(一)对html里现有的DOM元素进行操作。我上面说了,对现有的DOM元素进行操作,无非就是对样式的操作。所以我们首先就要能获取这个DOM元素的样...
-
JavaScript插件化开发方式
一,开篇分析今天这篇文章我们说点什么那?嘿嘿嘿。我们接着上篇文章对不足的地方进行重构,以深入浅出的方式来逐步分析,让大家有一个循序渐进提高的过程。废话少说,进入正题。让我们先来回顾一下之前的Js部分的代码,如下:复制代码代码如下:functionItemSelector(elem,o...
-
JavaScript中的style.cssText使用教程分解
很多人用过r、lay等直接设置元素的.样式属性,但是ext用过的人就不多了。cssText本质是什么?cssText的本质就是设置HTML元素的style属性值。cssText怎么用?复制代码代码如下:lementById("d1")ext="color:red;font-size:13px;";看了这个示例后,相信不说,也知道ext是什...