基于jquery上的轻量级《数据模板解析》插件
1.先上一个栗子。
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="js/jquery.js"></script>
</head>
<body>
<div mes --class="zys" --a="测试一" class="a" mesC="****{{[function((data[0].a == 1)?'123123':'sdfsdf';)]}}***{{[function($('body').append('sdf5 646'))]}}*****{{data[0].a}}*****{{data[0].a}}{{[function(if(b == '张云山'){'sdfjkshdj';})]}}*****">54654657</div>
<div mes>54654657</div>
<div mes mesC="sdfsd">54654657</div>
<div mes mesfor="data">
<div mesdata mesdataC="{{data[i].a}}sdf;lksd{{b}}">豆腐干豆腐</div>
对勾对勾
</div>
<div mesfor="data1">
<div>123</div>
</div>
<script>
var data = [
{a:1,b:2},
{a:11,b:22}
];
var data1 = [
{a:1,b:2},
{a:1,b:2},
{a:1,b:22},
{a:1,b:2}
];
var a = "测试一";
var b = "测试二";
$.extend({
mesfor:function(mesForName,fn){//模板循环
fn = fn || new Function();
$("*["+mesForName+"]").each(function(i,mesfor){
var children = $(mesfor).html();
var mesforData = $(mesfor).attr(mesForName);
$(mesfor).html("");
$.each(eval(mesforData),function(i,data){
var newReplace = eval("/"+mesforData+"\\[i\\]"+"/g");
var newChildren = children.replace(newReplace,mesforData+"["+i+"]");
$(mesfor).append(newChildren);
});
});
fn();
},
AttrAnalysis:function(StringObj){//内容解析,并返回数据
var text = StringObj;
var textAll = StringObj.match(/\{\{+.+?\}\}/g);//查找所有{{...}}
for(var i in textAll){
var replacefnString = textAll[i];
var FN = textAll[i].match(/\[function+\(+.+?\)\]/g);
for (var j in FN){
var replacefn = FN[j].replace(/(^\[function\()|(\)\]$)/g,"");
textAll[i] = eval(replacefn);
};
if(textAll[i].constructor.name == "String"){
if(textAll[i].indexOf("{{") != -1){
text = text.replace(textAll[i],eval(textAll[i]));
}else{
text = text.replace(replacefnString,textAll[i]);
};
}else if(textAll[i].constructor.name == ""){
text = text.replace(replacefnString,"");
};
};
return text;
},
mesFun:function(mes){
mes = mes || "mes";
var mesForName = mes + "for";
var mesC = mes + "c";
$.mesfor(mesForName,function(){
$("*["+mesForName+"]").each(function(i,e){
var mewMes = mes+$(e).attr(mesForName);
$.mesFun(mewMes);
$.mesfor(mesForName+"-"+$(e).attr(mesForName),function(){
$.mesFun(mewMes);
});
});
$("*["+mes+"]").each(function(i,e){
if($(e).attr(mesForName) == undefined){//无循环,可直接解析
if($(e).parents("*["+mesForName+"]").length == 0){
$.each(e.attributes,function(i,attr){
if(attr.name == mesC && attr.value !=""){//mesc文本源属性
$(e).text($.AttrAnalysis(attr.value));
}else{
if(attr.name.indexOf("--") != -1){//其他源属性
var newAttr = attr.name.replace(/^--/,"");
$(e).attr(newAttr, $.AttrAnalysis(attr.value));
};
};
});
};
};
});
});
}
});
$.mesFun(); </script>
</body>
</html>
2.插件用法
2-1》先把插件调进页面。
2-2》执行 $.mesFun(); 初始化数据。mesFun(mes)里面的mes参数可选填,默认mes=“mes”。该参数会直接影响解析对象。
2-3》数据的绑定
例如:
<script>
var aa="我是新文本";
var classB = "newclassA";
var ulData = [
{class:"classA",name:"mesfor1",id:0,text:"我是第1行数据"},
{class:"classB",name:"mesfor2",id:1,text:"我是第2行数据"},
{class:"classC",name:"mesfor3",id:2,text:"我是第3行数据"},
{class:"classD",name:"mesfor4",id:3,text:"我是第4行数据"},
{class:"classE",name:"mesfor5",id:4,text:"我是第5行数据"}
];
</script>
<div mes mesC=“{{aa}}”>我是文本</div>
说明:mesC属性值得是文本数据,即解析结果为:<div mes mesC=“{{aa}}”>我是新文本</div>,数据绑定的时候比如写在双中括号里面,如:{{aa}},以下同上。
<div mes mesC=“{{aa}}” --class="{{classB}}" class="classA">我是文本</div>
说明:--class即--属性,其解析结果<div mes mesC=“{{aa}}”--class="{{classB}}" class="newclassA">我是新文本</div>
<ul mesFor="ulData">
<li mes --class="{{ulData.class}}" --name="{{ulData.name}}" --id="{{ulData.id}}" mesc="{{ulData.text}}">我是默认数据</li>
</ul>
说明:mesfor="绑定的数据"是数据循环,解析结果为:
<ul mesFor="ulData">
<li mes --class="{{ulData.class}}" --name="{{ulData.name}}" --id="{{ulData.id}}" mesc="{{ulData.text}}" class="classA" name="mesfor1" id="0">我是第1行数据</li>
<li mes --class="{{ulData.class}}" --name="{{ulData.name}}" --id="{{ulData.id}}" mesc="{{ulData.text}}" class="classB" name="mesfor2" id="1">我是第2行数据</li>
<li mes --class="{{ulData.class}}" --name="{{ulData.name}}" --id="{{ulData.id}}" mesc="{{ulData.text}}" class="classC" name="mesfor3" id="2">我是第3行数据</li>
<li mes --class="{{ulData.class}}" --name="{{ulData.name}}" --id="{{ulData.id}}" mesc="{{ulData.text}}" class="classD" name="mesfor4" id="3">我是第4行数据</li>
<li mes --class="{{ulData.class}}" --name="{{ulData.name}}" --id="{{ulData.id}}" mesc="{{ulData.text}}" class="classE" name="mesfor5" id="4">我是第5行数据</li>
</ul>
2-4》属性源支持js脚本。
例如:
<div mes mesc="{{[function((aa == ‘我是新文本’)?'我是新文本一':'我是新文本二';)]}}">我是文本</div>
解析结果为:<div mes mesc="{{[function((aa == ‘我是新文本’)?'我是新文本一':'我是新文本二';)]}}">我是文本一</div>
基于jquery上的轻量级《数据模板解析》插件的更多相关文章
- Dropdown.js基于jQuery开发的轻量级下拉框插件
Dropdown.js 前言 在SPA(Single Page Application)盛行的时代,jQuery插件的轮子正在减少,由于我厂有需求而开发了这个插件.如果觉得本文对您有帮助,请给个赞,以 ...
- 利用HttpWebRequest模拟表单提交 JQuery 的一个轻量级 Guid 字符串拓展插件. 轻量级Config文件AppSettings节点编辑帮助类
利用HttpWebRequest模拟表单提交 1 using System; 2 using System.Collections.Specialized; 3 using System.IO; ...
- 基于jQuery的图片加载loading效果插件
基于jQuery的图片加载loading效果插件 图片loading的效果是网页中比较常见的,尤其是对大图片,loading效果让用户能够明白图片加载的过程. 实现思路也是比较简单的: $.fn.Lo ...
- 基于jQuery的图片相册滑出放大插件
今天给大家带来一款基于jQuery的图片相册滑出放大插件.点击相册图片,展示该图片.该插件适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗..效 ...
- 基于jQuery功能非常强大的图片裁剪插件
今天我们要来介绍一款基于jQuery功能非常强大的图片裁剪插件,这款jQuery图片裁剪插件可以选择裁剪框的尺寸比例,可以设置高宽尺寸,同时可以设置图片翻转角度,当然也支持图片的缩放,裁剪框也可以用鼠 ...
- Html在线编辑器--基于Jquery的xhEditor轻量级编辑器
xhEditor V1.2.2 下载地址 开源中国社区: http://www.oschina.net/p/xheditor xhEditor是一个基于jQuery开发的简单迷你并且高效的可视化XHT ...
- 一款基于jQuery的图片分组切换焦点图插件
这是一款基于jQuery的图片切换焦点图插件,这款jQuery焦点图插件的特点是图片可以分组切换,也就是说一次可以切换多张图片,相比其他焦点图插件,它能节省更多的空间,可以向用户展示更多的图片,非常实 ...
- [smartMenu.js] 一个基于jquery的实用的右键拓展菜单栏插件
正在为电子书阅读器添加精准易用的标记功能,其中一个方案是扩展阅读器界面的右键菜单栏,使得用户右键点击某个词.子句.段落的时候可以进行扩展操作. 右键菜单栏有很多基于jQuery的插件,其中灵活性比较强 ...
- 一款基于jQuery的图片下滑切换焦点图插件
之前为大家分享了好多款jquery插件,今天我们要分享的一款jQuery插件也比较实用,是一款jQuery焦点图插件.焦点图相当普通,一共可以循环播放4张图片,并且每一张图片在切换的时候都是向下滑动的 ...
随机推荐
- [Math] 常见的几种最优化方法
我们每个人都会在我们的生活或者工作中遇到各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题“在一定成本下,如何使利润最大化”等.最优化方法是一种数学方法,它是研究在给定约束之下如何寻求某些因素 ...
- .htaccess 基础教程(四)Apache RewriteCond 规则参数
Apache模块 mod_rewrite 提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求.它支持每个完整规则可以拥有不限数量的子规则以及附加条件规则的灵活而且强大的URL操作机制.此UR ...
- CPU的内部架构和工作原理 (转,相当不错)
http://blog.chinaunix.net/uid-23069658-id-3563960.html 一直以来,总以为CPU内部真是如当年学习<计算机组成原理>时书上所介绍的那样, ...
- Javascript闭包深入解析及实现方法
1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点:1. 作为一个函数变量的一个引用,当函数返回时 ...
- 记录一下git 的常用命令
以后如果要写一个东西,最好先搭建一个本地仓库,用版本控制对其进行操作,可能一开始有一些麻烦,但是很有可能会受益无穷. 说到git,必然会和github联系起来. 不管是在ubuntu里面还是在Wind ...
- git pull request
如何发 PR 以下以 wiki-pages 为例 把项目 fork 到自己名下,然后 clone 到本地 git clone git@code.xiaojukeji.com:yexiliang/wik ...
- .NET 事件
事件概述 在发生其他类或对象关注的事情时,类或对象可通过事件通知它们.发 ...
- java中的集合
集合比数组的优势: 1.集合可以存任意类型的变量,长度是可变的 2.数组只能存同一类型的变量,长度是固定的 3.集合中只能存对象 List集合 : 接口 提供公有的方法 特有的方法: 1.List中 ...
- cryptkeeper的使用
转自:http://www.linuxidc.com/Linux/2011-06/37070.htm Cryptkeeper 是加密文件系统 EncFS 的前端工具,以 Gnome Applet 方式 ...
- CentOS7下Oracle的自动备份
概述 Linux下Oracle自动备份就没有MSSQL那么简单,在Linux下Oracle的备份需要借助crontab 指令,crontab 能够自动执行系统定时任务,通过配置crontab 指向Or ...