全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

[js高手之路]HTML标签解释成DOM节点的实现方法

最近在封装一个开源框架,已经写了500行, 已经具备jquery的大多数常用功能,后面还会扩展大量的工具函数和MVVM双向驱动等功能。跟jquery的使用方法完全一样,jquery的选择器,几乎都能支持,为什么说这事,跟这篇文章的主题有毛关系呢?因为这篇文章要讲的就是我在写框架过程中碰到的一个问题,封装jquery的after方法,支持DOM和html标签两种用法,html标签传参,我要把html解释成DOM结构,用DOM的方法插入.

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

<div onclick="test();" name="test" id="test">this is a test string</div>

这个html包括了事件,样式,属性,内容.

我们接着用正则把这个html的每一部分匹配出来,我们需要的是:

1、标签名, 因为创建dom节点的时候需要

2、属性和内容都要单独分离出来

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

{
id:"test
inner:"this is a test string
name:"test"
onclick:"test();"
style:"color:red;background:green;"
tag:"div"
}

如果有了这个结构,只要拿到对应的键和值,组装成一个dom就可以搞定了

var o = document.createElement( obj['tag'] );
  o.innerHTML = obj['inner'];
  delete obj['inner'];
  delete obj['tag'];
  for( var key in obj ){
   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">this is a test string</div>';
  var res = str.match(re);

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

res[1]存储的是标签名称,只需要把两边的空格去掉

res[2]存储的是属性和值,我们用split函数按空格切割一次,再用split函数按'='切割一次,就能分解出来了

res[4]存储的就是字符串的内容

上面3部分,只要用循环和字符串稍加处理就可以得出目标结果了

那么完整的处理代码就是:

var re = /<(\w+\s*)(\w+[=][\'\"](.*)?[\'\"]\s*)*>(.*)?<\/\w+>/;
  var str = '<div onclick="test();" name="test" id="test">this is a test string</div>';
  var res = str.match(re);

  var tagName = null, attrList = [], arr = [], obj = {};
  if( res[1] ) {
   tagName = res[1].trim();
   obj['tag'] = tagName;
  }
  if( res[4] ) {
   obj['inner'] = res[4];
  }
  if ( res[2] ) {
   attrList = res[2].split( /\s+/ );
   for( var i = 0, len = attrList.length; i < len; i++ ){
    arr = attrList[i].split("=");
    // console.log( arr );
    obj[arr[0]] = arr[1].replace( /(^[\'\"]+|[\'\"]$)/g, function(){
     return '';
    } );
   }
  }

  var o = document.createElement( obj['tag'] );
  o.innerHTML = obj['inner'];
  delete obj['inner'];
  delete obj['tag'];
  for( var key in obj ){
   o.setAttribute( key, obj[key] );
  } 
  document.body.appendChild( o );

可以自行封装一个函数,我相信你应该轻易就能封装出来吧.

以上这篇[js高手之路]HTML标签解释成DOM节点的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# HTML  # DOM  # 节点  # JavaScript DOM节点操作方法总结  # JS实现动态添加DOM节点和事件的方法示例  # JavaScript中对DOM节点的访问、创建、修改、删除  # js和jquery对dom节点的操作(创建/追加)  # JS常见DOM节点操作示例【创建  # 插入  # 删除  # 复制  # 查找】  # JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例  # JavaScript DOM节点添加示例  # JS构建页面的DOM节点结构的实现代码  # JS访问DOM节点方法详解  # JavaScript DOM节点操作实例小结(新建  # 删除HTML元素)  # 原生js实现针对Dom节点的CRUD操作示例  # 的是  # 要把  # 就能  # 给大家  # 这篇文章  # 就可以  # 装出  # 我在  # 都要  # 这就是  # 都能  # 还会  # 两种  # 只需  # 之路  # 希望能  # 写了  # 这事  # 你应该  # 可以看出 


相关文章: 如何选择服务器才能高效搭建专属网站?  如何构建满足综合性能需求的优质建站方案?  如何使用Golang table-driven基准测试_多组数据测量函数效率  南京网站制作费用,南京远驱官方网站?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  如何撰写建站申请书?关键要点有哪些?  广州建站公司哪家好?十大优质服务商推荐  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  建站之星如何取消后台验证码生成?  b2c电商网站制作流程,b2c水平综合的电商平台?  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  如何通过宝塔面板实现本地网站访问?  宝塔新建站点为何无法访问?如何排查?  如何在企业微信快速生成手机电脑官网?  制作网页的网站有哪些,电脑上怎么做网页?  黑客如何通过漏洞一步步攻陷网站服务器?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  php json中文编码为null的解决办法  h5在线制作网站电脑版下载,h5网页制作软件?  如何选择域名并搭建高效网站?  婚礼视频制作网站,学习*后期制作的网站有哪些?  如何在云服务器上快速搭建个人网站?  建站主机类型有哪些?如何正确选型  外贸公司网站制作,外贸网站建设一般有哪些步骤?  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  如何用花生壳三步快速搭建专属网站?  成都网站制作报价公司,成都工业用气开户费用?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  建站之星官网登录失败?如何快速解决?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  南平网站制作公司,2025年南平市事业单位报名时间?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  如何在Golang中指定模块版本_使用go.mod控制版本号  建站主机服务器选型指南与性能优化方案解析  微信小程序制作网站有哪些,微信小程序需要做网站吗?  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  内网网站制作软件,内网的网站如何发布到外网?  如何在香港免费服务器上快速搭建网站?  nginx修改上传文件大小限制的方法  建站主机功能解析:服务器选择与快速搭建指南  如何自定义建站之星网站的导航菜单样式?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  如何在服务器上三步完成建站并提升流量?  平台云上自主建站:模板化设计与智能工具打造高效网站  名字制作网站免费,所有小说网站的名字?  免费制作小说封面的网站有哪些,怎么接网站批量的封面单? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。