一、定义正则表达式:

         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】功能的更多相关文章

  1. Emmet的高级功能与使用技巧

    Emmet系列教程 前端开发利器Emmet的介绍 Emmet快速编写HTML代码 Emmet快速编写CSS样式 Emmet快速编写CSS样式 编写好HTML和CSS代码时,我们也需要修改或添加一些内容 ...

  2. c#/asp.net实现炫酷仿调色板/颜色选择器功能

    asp.net 之颜色选择器,仿调色板功能 1. 插件非常容易使用,只需引用相应的js文件和css样式文件即可,见代码示例,插件精小,炫酷 2. 只需要初始化即可使用,并且选择的颜色会在文本框中以16 ...

  3. Android学习之仿QQ側滑功能的实现

    如今项目越来越多的应用了滑动删除的功能,Android本来遵循的是长按删除,IOS定制的是滑动删除,不可否认滑动删除确实在客户体验上要好一点,所以看了非常多关于仿QQ滑动删除的样例,还是感觉代码家的A ...

  4. uniapp+nvue开发之仿微信语音+视频通话功能 :实现一对一语音视频在线通话

    ​ 本篇文章是利用uni-app和nvue实现微信效果功能的第三篇了,今天我们基于uniapp + nvue实现的uniapp仿微信音视频通话插件实例项目,实现了以下功能: 1: 语音通话 2: 视频 ...

  5. uniapp+nvue实现仿微信App界面+功能 —— uni-app实现聊天+语音+视频+图片消息

    基于uniapp + nvue实现的uniapp仿微信界面功能聊天应用 txim 实例项目,实现了以下功能. 1: 聊天会话管理 2: 好友列表 3: 文字.语音.视频.表情.位置等聊天消息收发 4: ...

  6. 使用Jquery UI 高仿百度搜索下拉列表功能

    最近项目有个需求,在新添加商户的时候,用户输入商户名称后,如果系统中有类似的商户名称,直接显示出来,如下图的效果: 实现这个功能,直接使用了JQuery UI 插件 目前我使用的实现版本是: 网友可以 ...

  7. C# 实现简单仿QQ登陆注册功能

    闲来没事,想做一个仿QQ登陆注册的winform,于是利用工作之余,根据自己的掌握和查阅的资料,历时4天修改完成,新手水平,希望和大家共同学习进步,有不同见解希望提出! 废话不多说,进入正题: 先来看 ...

  8. 安卓listView实现下拉刷新上拉加载滑动仿QQ的删除功能

    大家对这些功能都是看的多了,然后对上拉刷新和下拉加载的原理都是非常清楚的,所以实现这功能其实也就是为了让大家能够从众多的同行们来进行比较学习而已,虽然即使是这样,但是面试的时候面试官还是会问你上拉和下 ...

  9. 利用百度地图Android sdk高仿微信发送位置功能

    接触了百度地图开发平台半个月了,这2天试着模仿了微信给好友发送位置功能,对百度地图的操作能力又上了一个台阶 (假设须要完整demo.请评论留下邮箱) (眼下源代码已经不发送,假设须要源代码.加qq31 ...

  10. jq仿ps颜色拾取功能-js颜色拾取

    1.效果展示 2.html代码:index.html <!DOCTYPE html> <html lang="en"> <head> <m ...

随机推荐

  1. 在一个aspx或ashx页面里进行多次ajax调用

    在用ajax开发asp.net程序里.利用ashx页面与前台页面进行数据交互.但是每个ajax交互都需要一个ashx页面.结果是项目里一大堆ashx页面.使项目难以管理.现在我们就想办法让一个ashx ...

  2. React学习笔记-6-运行中阶段介绍

    运行中可以使用的函数componentWillReceiveProps:父组件修改属性触发,可以修改新属性,修改状态.字面意思,组件将要接收属性,这个函数触发的时机就是组件的属性将要发生改变的时候,但 ...

  3. 用Ghost进行备份还原

    今天给大伙介绍一下怎么用Ghost给自己的系统进行备份和还原,在这里我用的是U盘启动盘(电脑店)里面的手动Ghost.   首先给大家介绍一下Ghost界面的一些相关选项的含义:(虽然难看但希望大伙们 ...

  4. 在ubuntu下安装google chrome

    由于手上有两台电脑,再加上我那个选择困难症加上纠结劲.所以果断把其中一台电脑只装linux系统,另一台电脑只装windows了.免得我老纠结!于是linux便选择了ubuntu. 由于浏览器一直用的是 ...

  5. CoreData __ 基本原理

    操作过程 Context想要获取值,先要告诉连接器,我要什么东西 链接器再告诉store, 你给我什么东西, store去找 找到之后返回给链接器,链接器再返回给Context          Co ...

  6. RedHat Enterprise Linux 6.4 使用 Centos 6 的yum(转)

    概述 redhat的yum源需注册付费,费时费力,整理RedHat yum 安装CentOS的方法. 安装系统文件 系统:RedHat Enterprise Linux 6.4-x86_64 md5: ...

  7. POCO库——Foundation组件之日期时间DateTime

    日期时间DateTime:内部提供多个设计计时器.日期.时区.时间戳等: Clock.h :Clock时钟计时类,_clock:Int64类型时钟值,CLOCKVAL_MIN.CLOCKVAL_MAX ...

  8. Ubuntu(Linux系统)虚拟机工具vmtools详细说明

    安装虚拟机工具vmtools大概步骤如下: 个人总结步骤: 第一步:点击虚拟机软件的vm工具栏选项,选择install vmware tools(安装VMware Tools) 第二步:桌面会出现一个 ...

  9. CC2530使用串口下载(SBL)

    工作环境: WIN7 64位 IAR 版本: 8.10.3 (8.10.3.10338) ZStack-CC2530-2.3.1-1.4.0协议栈,下载地址:http://download.csdn. ...

  10. 编写高质量的 Java 代码

    代码质量概述 代码质量所涉及的5个方面,编码标准.代码重复.代码覆盖率.依赖项分析.复杂度分析.这5方面很大程序上决定了一份代码的质量高低. 我们分别来看一下这5方面:编码标准:这个想必都很清楚,每个 ...