这篇文章主要介绍了HTML标签如何解释成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 );
可以自行封装一个函数,我相信你应该轻易就能封装出来吧.
感谢你能够认真阅读完这篇文章,希望小编分享的“HTML标签如何解释成DOM节点”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。