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

发布时间 - 2026-01-11 03:02:25    点击率:

最近在封装一个开源框架,已经写了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操作示例  # 的是  # 要把  # 就能  # 给大家  # 这篇文章  # 就可以  # 装出  # 我在  # 都要  # 这就是  # 都能  # 还会  # 两种  # 只需  # 之路  # 希望能  # 写了  # 这事  # 你应该  # 可以看出 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251811 】 【 AI营销90571


相关推荐: 如何在阿里云完成域名注册与建站?  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  如何在IIS中新建站点并配置端口与物理路径?  Laravel如何使用Telescope进行调试?(安装和使用教程)  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  如何在宝塔面板创建新站点?  详解vue.js组件化开发实践  如何正确选择百度移动适配建站域名?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  昵图网官网入口 昵图网素材平台官方入口  java中使用zxing批量生成二维码立牌  Laravel Fortify是什么,和Jetstream有什么关系  简历在线制作网站免费版,如何创建个人简历?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  Python函数文档自动校验_规范解析【教程】  MySQL查询结果复制到新表的方法(更新、插入)  非常酷的网站设计制作软件,酷培ai教育官方网站?  简单实现Android文件上传  Laravel如何记录自定义日志?(Log频道配置)  🚀拖拽式CMS建站能否实现高效与个性化并存?  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  中国移动官方网站首页入口 中国移动官网网页登录  Android利用动画实现背景逐渐变暗  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  Bootstrap整体框架之CSS12栅格系统  智能起名网站制作软件有哪些,制作logo的软件?  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  七夕网站制作视频,七夕大促活动怎么报名?  黑客如何通过漏洞一步步攻陷网站服务器?  香港服务器如何优化才能显著提升网站加载速度?  魔方云NAT建站如何实现端口转发?  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  网站制作大概多少钱一个,做一个平台网站大概多少钱?  如何在宝塔面板中修改默认建站目录?  如何用好域名打造高点击率的自主建站?  如何在服务器上配置二级域名建站?  免费网站制作appp,免费制作app哪个平台好?  Laravel怎么调用外部API_Laravel Http Client客户端使用  详解阿里云nginx服务器多站点的配置  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  音乐网站服务器如何优化API响应速度?  如何在Windows虚拟主机上快速搭建网站?  Laravel如何实现事件和监听器?(Event & Listener实战)  如何在腾讯云服务器上快速搭建个人网站?