一、定义正则表达式:

         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. mysql 5.7 的安装配置与 navicat premium for mysql 11 的破解使用

    再安装mysql5.7 或以上的版本出现了一些问题,现在总结下,希望能给初入学习mysql的人一下帮助,大牛就不要来嘲笑小弟我了 首先准备如下: 1.下载mysql 5.7,下载地址:https:// ...

  2. 使用KRPano资源分析工具强力加密KRPano项目(XML防破解,切片图保护,JS反调试)

    软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278936(软件免费版本在群内提供) 最新博客地址:blog.turenlong.com 限时下载地址:htt ...

  3. Content-disposition

    今天查看Struts2的文件上传部分 发现有个例子开头打印的信息中有Content-Disposition,一时好奇,所以了解了一下.顺便学习一下文件上传所需要的注意事项. Content-dispo ...

  4. [Sass]扩展/继承

    [Sass]扩展/继承 继承对于了解 CSS 的同学来说一点都不陌生,先来看一张图: 图中代码显示".col-sub .block li,.col-extra .block li" ...

  5. 在Eclipse中集成Ant配置

    提要:本文将向你展示如何使用Eclipse设置为Ant所用的属性值和环境变量,并简要分析如何配置Ant编辑器以便从Eclipse内部操作Ant文件. 一. 修改Ant Classpath 在使用一个可 ...

  6. SQL Server删除重复行的6个方法

    SQL Server删除重复行是我们最常见的操作之一,下面就为您介绍六种适合不同情况的SQL Server删除重复行的方法,供您参考. 1.如果有ID字段,就是具有唯一性的字段 delect   ta ...

  7. 史上最全的maven的pom.xml文件详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  8. Java 8中一些常用的全新的函数式接口

    这一篇属于菜鸟级博客,只是介绍了一些在Java 8中新出现的一些很有用的接口,通过一些简单的例子加以说明,没有深入地阐述. 函数式接口 什么是函数式接口? 函数式接口,@FunctionalInter ...

  9. ViewPager中Fragment切换过程不被销毁的方法

    背景:最近在写一个音乐播放器,然后一个ViewPager里面加载了四个Fragment,但是在切换过程中发现,Fragment总是被销毁,在网上查了一下,发现有两种办法可以保证Fragment不被销毁 ...

  10. php抽奖代码

    1.经典概率算法抽奖 $tmpItems = ['电脑'=>10, '相机'=>50, '100元现金'=>500]; $proSum = array_sum($tmpItems); ...