宝哥软件园

【js大师之路】如何解读】HTML标签作为DOM节点

编辑:宝哥软件园 来源:互联网 时间:2021-09-03

最近封装了一个开源框架,写了500行,已经具备了jquery的大部分常用功能。稍后,工具功能和MVVM双向驱动器等大量功能将被扩展。jquery的用法和jquery完全一样。几乎jquery的所有选择器都可以支持它。为什么和这篇文章的主题有关?因为本文讲的是我在编写框架过程中遇到的一个问题,封装jquery的after方法支持DOM和html标签两种用法,html标签作为参数传递。我想把html解释成DOM结构,用DOM方法插入。

首先,我们编写一个通用的html标签:

div onclick=' test();'name='test' id='test '这是一个测试字符串/div

这个html包括事件、样式、属性和内容。

然后我们有规律地匹配这个html的每个部分。我们需要的是:

1.标签名,因为创建dom节点时需要它

2.属性和内容应该分开

为了创建dom,我们用一个json保存它,比如这个标签,我们想要处理的最终结果是:

{id:'testinner: '这是一个测试字符串: ' test ' onclick : ' test();style: ' color:red背景:绿色;Tag:'div'}如果您有这个结构,只需获取相应的键和值,并将它们组装到dom中

var o=document . create element(obj[' tag ']);o . innerHTMl=obj[' inner '];删除obj[' inner '];删除obj['标记'];for(obj中的var键){ o.setAttribute(key,obj[key]);} document . body . appendchild(o);解释很清楚,所以我们必须首先用正则表达式匹配html标记的每个部分

var re=/(w s*)(w [=][''](。*)?['']s*)*(。*)?/ w/;var str=' div onclick=' test();name='test' id='test '这是一个测试字符串/div;var RES=str . match(re);

这是我们匹配的结果。从图中可以看出,

Res[1]存储标签名,只需删除两边的空格

Res[2]存储属性和值。我们用split函数按空格切一次,再用split函数按'='切一次,可以分解

Res[4]存储字符串的内容

在上面的三个部分中,您可以通过使用循环和字符串进行一些处理来获得目标结果

那么完整的处理代码是:

var re=/(w s*)(w [=][''](。*)?['']s*)*(。*)?/ w/;var str=' div onclick=' test();name='test' id='test '这是一个测试字符串/div;var RES=str . match(re);var tagName=null,attrList=[],arr=[],obj={ };if(res[1] ) { tagName=res[1]。trim();obj['tag']=标记名;} if(RES[4]){ obj[' inner ']=RES[4];} if (res[2] ) { attrList=res[2]。拆分(/ s/);for(var i=0,len=attrList.length我透镜;i ){ arr=attrList[i]。split('=');//console . log(arr);obj[arr[0]]=arr[1]。replace(/(^['')|[ ' ']$)/g,function(){ return“”;} );} } var o=document . create element(obj[' tag ']);o . innerHTMl=obj[' inner '];删除obj[' inner '];删除obj['标记'];for(obj中的var键){ o.setAttribute(key,obj[key]);} document . body . appendchild(o);你可以自己封装一个函数。我相信你可以很容易地封装它。

上面的【js大师之路】HTML标签说明了DOM节点的实现方式是边肖共享的全部内容。希望能给大家一个参考,支持我们。

更多资讯
游戏推荐
更多+