仿【Emmet】转【HTML】功能
一、定义正则表达式:
var
whitespace = "[\\x20\\t\\r\\n\\f]*",
nvarcharEncoding = whitespace + "\\{([^}]+)\\}" + whitespace,
characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
relationEncoding = "[>\\+]",
multiEncoding = whitespace + "(\\d+)" + whitespace + "\\*" + whitespace,
attrEncoding = whitespace + "\\[" + whitespace + "(" + characterEncoding + ")(?:" + whitespace + "([*^$|!~]?=)" + whitespace +
"(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + characterEncoding.replace("w", "w#") + "))|)" + whitespace + "\\]" + whitespace,
mainEncoding = whitespace + "[#\\.]?" + characterEncoding + whitespace,
htmlEncoding = whitespace + "(" + multiEncoding + ")*((" + mainEncoding + "|" + attrEncoding + "|" + nvarcharEncoding + ")+)" + whitespace,
htmlsEncoding = htmlEncoding + "(" + relationEncoding + htmlEncoding + ")*"; var
rsingle = /[\(\)]/g,
rdouble = /[(][^()]*[)]/g,
rsinglel = /^[\x20\t\r\n\f]*\(/,
rsingler = new RegExp("^(" + htmlsEncoding + ")?\\)+"); var rmulti = new RegExp(multiEncoding);
var rchild = new RegExp("^(" + whitespace + "\\))?" + whitespace + ">");
var rnext = new RegExp("^" + whitespace + "\\+");
var rid = new RegExp("^" + whitespace + "#(" + characterEncoding + ")");
var rtag = new RegExp("^" + whitespace + "(\\w+)");
var rclass = new RegExp("^" + whitespace + "\\.(" + characterEncoding + ")");
var rcontent = new RegExp("^" + whitespace + nvarcharEncoding);
var rattr = new RegExp("^" + attrEncoding);
var rhtml = new RegExp("^" + htmlsEncoding + "$");
二、定义方法入口:
function dynamicMultiTag(selector) {
if (!selector || $.type(selector) !== "string" || !rhtml.test(selector.replace(rsingle, ""))) { return selector; }
var match = selector.replace(rdouble, "");
while (rdouble.test(match)) { match = match.replace(rdouble, ""); }
if (rsingle.test(match)) { return selector; }
return _dynamicMultiTag_(selector);
}
三、定义方法主体:
function _dynamicMultiTag_(selector) {
var match, multi = 1, result, results = [];
if (match = rmulti.exec(selector)) {
multi = match[1] >>> 0;
selector = selector.replace(rmulti, '');
}
if (rsinglel.test(selector)) {
selector = selector.replace(rsinglel, '');
result = _dynamicMultiTag_(selector);
while (multi--) {
results.push(result);
}
selector = selector.replace(rsingler, '');
if (rnext.test(selector)) { results.push(_dynamicMultiTag_(selector.replace(rnext, ''))); }
return results.join('');
}
var tag = 'div', htmls = [];
if (match = rtag.exec(selector)) { tag = match[1]; selector = selector.replace(rtag, ""); }
htmls.push('<', tag);
if (match = rid.exec(selector)) {
htmls.push(' id="', match[1], '"');
selector = selector.replace(rid, "");
}
if (match = rclass.exec(selector)) {
htmls.push(' class="', match[1]);
while (match = rclass.exec(selector = selector.replace(rclass, ''))) { htmls.push(' ', match[1]); }
htmls.push('"');
}
if (match = rid.exec(selector)) {
htmls.push(' id="', match[1], '"');
selector = selector.replace(rid, "");
}
while (match = rattr.exec(selector)) {
htmls.push(match[1], match[2], '"', match[3] || match[4] || match[5], '"');
selector = selector.replace(rattr, "");
}
htmls.push('>');
if (match = rcontent.exec(selector)) {
htmls.push(match[1]);
selector = selector.replace(rcontent, "");
}
if (rchild.test(selector)) {
htmls.push(_dynamicMultiTag_(selector = selector.replace(rchild, "")));
}
htmls.push('</', tag, '>');
if (rnext.test(selector)) {
htmls.push(_dynamicMultiTag_(selector = selector.replace(rnext, "")));
}
result = htmls.join('');
while (multi--) { results.push(result); }
return results.join('');
}
四、使用方法:dynamicMultiTag(selector) //selector ==> {string|object string} == >('2*div') ==>"<div></div><div></div>"
1、克隆(如:"2*div" ==> "<div></div><div></div>")
2、选择器(如:'div#id.class > div + span' ==> '<div id="id" class="class"><div></div><span></span></div>')
3、内容(如:'span{我是span元素的内容}' ==> '<span>我是span元素的内容</span>')
4、多元(如:'(div.i11 > span.i12) + (div.i21 + div.i22 > (div.i221 + span.i222))' ==> <div class="i11"><span class="i12"></span></div><div class="i21"></div><div class="i22"><div class="i221"></div><span class="i222"></span></div>)
仿【Emmet】转【HTML】功能的更多相关文章
- Emmet的高级功能与使用技巧
Emmet系列教程 前端开发利器Emmet的介绍 Emmet快速编写HTML代码 Emmet快速编写CSS样式 Emmet快速编写CSS样式 编写好HTML和CSS代码时,我们也需要修改或添加一些内容 ...
- c#/asp.net实现炫酷仿调色板/颜色选择器功能
asp.net 之颜色选择器,仿调色板功能 1. 插件非常容易使用,只需引用相应的js文件和css样式文件即可,见代码示例,插件精小,炫酷 2. 只需要初始化即可使用,并且选择的颜色会在文本框中以16 ...
- Android学习之仿QQ側滑功能的实现
如今项目越来越多的应用了滑动删除的功能,Android本来遵循的是长按删除,IOS定制的是滑动删除,不可否认滑动删除确实在客户体验上要好一点,所以看了非常多关于仿QQ滑动删除的样例,还是感觉代码家的A ...
- uniapp+nvue开发之仿微信语音+视频通话功能 :实现一对一语音视频在线通话
本篇文章是利用uni-app和nvue实现微信效果功能的第三篇了,今天我们基于uniapp + nvue实现的uniapp仿微信音视频通话插件实例项目,实现了以下功能: 1: 语音通话 2: 视频 ...
- uniapp+nvue实现仿微信App界面+功能 —— uni-app实现聊天+语音+视频+图片消息
基于uniapp + nvue实现的uniapp仿微信界面功能聊天应用 txim 实例项目,实现了以下功能. 1: 聊天会话管理 2: 好友列表 3: 文字.语音.视频.表情.位置等聊天消息收发 4: ...
- 使用Jquery UI 高仿百度搜索下拉列表功能
最近项目有个需求,在新添加商户的时候,用户输入商户名称后,如果系统中有类似的商户名称,直接显示出来,如下图的效果: 实现这个功能,直接使用了JQuery UI 插件 目前我使用的实现版本是: 网友可以 ...
- C# 实现简单仿QQ登陆注册功能
闲来没事,想做一个仿QQ登陆注册的winform,于是利用工作之余,根据自己的掌握和查阅的资料,历时4天修改完成,新手水平,希望和大家共同学习进步,有不同见解希望提出! 废话不多说,进入正题: 先来看 ...
- 安卓listView实现下拉刷新上拉加载滑动仿QQ的删除功能
大家对这些功能都是看的多了,然后对上拉刷新和下拉加载的原理都是非常清楚的,所以实现这功能其实也就是为了让大家能够从众多的同行们来进行比较学习而已,虽然即使是这样,但是面试的时候面试官还是会问你上拉和下 ...
- 利用百度地图Android sdk高仿微信发送位置功能
接触了百度地图开发平台半个月了,这2天试着模仿了微信给好友发送位置功能,对百度地图的操作能力又上了一个台阶 (假设须要完整demo.请评论留下邮箱) (眼下源代码已经不发送,假设须要源代码.加qq31 ...
- jq仿ps颜色拾取功能-js颜色拾取
1.效果展示 2.html代码:index.html <!DOCTYPE html> <html lang="en"> <head> <m ...
随机推荐
- Photoshop学习笔记
视频地址:PhotoshopCS5视频教程 1.打开文件的快捷方式:软件刚启动时,双击绘图区域 2.文件->新建,弹出的新建对话框中,包含了剪切板及纸张的相关信息 3.图像缩放快捷方式:ctrl ...
- Merge K Sorted Arrays
This problem can be solved by using a heap. The time is O(nlog(n)). Given m arrays, the minimum elem ...
- cocos2d-x宏定义
1 ccp : The "ccp" prefix means: "CoCos2d Point" //查看: ../cocos2d-x-2.2/cocos2dx/ ...
- [Android Pro] http://blog.csdn.net/wuyinlei/article/category/5773375
http://blog.csdn.net/wuyinlei/article/category/5773375
- 海外建VPS并支持VPN
推荐 DigitalOcean http://www.digitalocean.com/?refcode=7c26aea99ed6
- 《Mastering.Ext.JS. 》书上主要示例都搞了个样子出来,纪念
- 12.Java中Comparable接口,Readable接口和Iterable接口
1.Comparable接口 说明:可比较(可排序的) 例子:按照MyClass的y属性进行生序排序 class MyClass implements Comparable<MyClass> ...
- Android 登录界面与首页的设计
全屏效果 //取消标题,取消状态栏 this.requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(Wind ...
- 常用命令[Linux]
Linux文件类型 -:普通文件(f) d:目录文件 b:块设备文件(block) c:字符设备文件(character) l:符号链接文件(symbolic link file) p:命名管道文件( ...
- 第三十三篇:使用uiresImporter生成uires.idx及skin.xml
在SOUI中,使用uires.idx这个文件来记录程序中使用的所有资源文件. 此外绘制对象(ISkinObj)则一般放在skin.xml中描述. 要向一个界面中增加一个新的图片,在没有uiresImp ...