当前位置: 首页 > Web前端 > HTML

使用模板从JavaScript中提取HTML

时间:2023-04-02 17:54:23 HTML

1、当你需要在页面中注入一大段HTML标签时,你应该使用服务器渲染(从服务器加载HTML标签)。该方法将模板放在服务器上,使用XMLHttpRequest对象获取外部标签(如多页应用)functionloadDialog(name,oncomplete){varxhr=newXMLHttpRequest();xhr.open('get','/js/dialog/'+name,true);xhr.onreadystatechange=function(){if(xhr.readyState==4&&xhr.status==200){vardiv=document.getElementById('dlg-holder');div.innerHTML=xhr.responseText;oncomplete();}else{//错误处理代码}};xhr.send(null);}//使用YUI的API函数loadDialog(name,oncomplete){Y.one('#dlg-holder').log('/js/dialog/'+name,oncomplete);}//利用JQuery的API函数loadDialog(name,oncomplete){$('#dlg-holder').load('/js/dialog/'+name,oncomplete);}二、客户端Templates对于少量标签段,应考虑客户端模板。客户端模板是带有“插槽”(占位符)的标签片段,通过JavaScript程序(模板引擎)替换为数据,然后将替换后的标签片段插入到页面中。JavaScript程序(模板引擎)自定义模板文本处理程序functionsprintf(text){vari=1,args=arguments;returntext.replace(/%s/g,function(){return(i...因为评论也是一个DOM节点,可以通过JS提取://FormatandinsertDOMmethodDefinefunctionaddItem(url,text){varmylist=document.getElementById('mylist');vartemplateText=mylist.firstChild.nodeValue;//提取模板文本varresult=sprintf(templateText,url,text);div.innerHTML=结果;mylist.insertAdjacentHTML('beforeend',result);}//调用方法addItem('/item/4','第一项');addItem('/item/4','第二项');2.存入自定义类型属性的functionaddItem(url,text){varmylist=document.getElementById('mylist');var脚本=document.getEelementById('列表项');vartemplateText=script.text;//提取模板文本varresult=sprintf(templateText,url,text);vardiv=document.createElement('div');div.innerHTML=结果.replace(/^\s*/,'');//去掉模板文本的前导空格(因为在标签中functionaddItem(url,text){varmylist=document.getElementById('mylist'),script=document.getElementById('list-item'),模板=Handlebars.compile(script.text),//提取模板文本,返回格式化方法div=document.createElement('div'),result;结果=模板({文本:文本,网址:网址});div.innerHTML=结果;mylist.appendChild(div.firstChild);}//调用addItem('/item/4,'第一项');本文参考《编写可维护的JavaScript》