麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

[js高手之路]HTML標簽解釋成DOM節點的實現方法

2019-11-19 15:36:08
字體:
來源:轉載
供稿:網友

最近在封裝一個開源框架,已經寫了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:"testinner:"this is a test stringname:"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節點的實現方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 最新中文字幕日本 | 看一级大毛片 | 污片在线观看视频 | 本色视频aaaaaa一级网站 | a级毛片免费观看在线播放 日本aaa一级片 | 国产精品久久久久久久久久尿 | 久久免费看毛片 | 国产精品久久久久无码av | 国内精品久久久久久久影视红豆 | 暖暖免费观看高清完整版电影 | 免费在线观看国产精品 | 欧美四级在线观看 | 色无极影院亚洲 | 亚洲综合无码一区二区 | 欧美精品a∨在线观看不卡 午夜精品影院 | 一级电影免费 | 国产成人高潮免费观看精品 | 亚洲一区二区三区日本久久九 | 亚洲综合色视频在线观看 | 久久国产精品电影 | www视频免费在线观看 | 久草在线高清视频 | cosplay裸体福利写真 | 久久久久女人精品毛片九一 | 久久av免费 | 渔夫荒淫艳史 | 国产成人在线视频播放 | 亚洲一区二区三区日本久久九 | a级毛片免费观看在线播放 日本aaa一级片 | 成人午夜视频免费在线观看 | 精品国产专区 | 亚洲第一页中文字幕 | 亚洲一区二区三区四区精品 | 日韩99 | 美女羞羞视频网站 | 欧美性a视频 | 精品久久一区二区 | 激情宗合网 | 日韩激情一区 | 欧洲精品久久 | 久久久青 |