问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何将HTML String 转换为 dom 元素

发布网友 发布时间:2022-04-19 23:42

我来回答

3个回答

热心网友 时间:2022-04-20 01:12

可以使用eval()方法。

eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行结果是一个值,则返回此值,否则返回undefined。
下面是具体用法:
var code1='"a" + 2'; //表达式
var code2='{a:2}'; //语句
alert(eval(code1)); //->'a2'
alert(eval(code2)); //->undefined
//json字符串使用eval('('+string+')')方法转换成js对象。
alert(eval('(' + code2 + ')')); //->[object object]转换成对象。

热心网友 时间:2022-04-20 02:30

可以使用eval()方法。

eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行结果是一个值,则返回此值,否则返回undefined。
下面是具体用法:

var code1='"a" + 2'; //表达式
var code2='{a:2}'; //语句
alert(eval(code1)); //->'a2'
alert(eval(code2)); //->undefined
//json字符串使用eval('('+string+')')方法转换成js对象。
alert(eval('(' + code2 + ')')); //->[object object]转换成对象。

热心网友 时间:2022-04-20 04:04

前一段时间因为需求,所以把这方面的资料自己查询规整了一下,以备后用。
DOMParser
对于开发者来说,我们"期盼"的最好的方式当然是原生的浏览器支持,就像下面这样
1: var parser = new DOMParser();
2: var doc = parser.parseFromString("<input />", "text/html");

Tips:
parseFromString 返回的并不仅仅是一个 input 元素的 node, 而是一个完整的 Document
这里是支持 script 标签的, 但是当解析出的 dom 被添加到页面时,script是不会被执行的
最好保证格式良好,否则可能并不会展现如我们预期的 dom 结构

遗憾的是,DOMParser 对 HTML 的解析仅仅得到了 Firefox 12+, IE 10+ 的支持,其余的浏览器均不支持,所以我们要寻求浏览器兼容性更好的方法
InnerHTML
用 javascript 写一个简易的 parser 其实并不是很难,基本的雏形就像下面这样
1: (function (DOMParser) {
2: "use strict";
3:
4: var
5: DOMParser_proto = DOMParser.prototype,
6: real_parseFromString = DOMParser_proto.parseFromString;
7:
8: // Firefox/Opera/IE throw errors on unsupported types
9: try {
10: // WebKit returns null on unsupported types
11: if ((new DOMParser).parseFromString("", "text/html")) {
12: // text/html parsing is natively supported
13: return;
14: }
15: } catch (ex) {}
16:
17: DOMParser_proto.parseFromString = function (markup, type) {
18: if (/^\s*text\/html\s*(?:;|$)/i.test(type)) {
19: var
20: doc = document.implementation.createHTMLDocument("");
21: if (markup.toLowerCase().indexOf('<!doctype') > -1) {
22: doc.documentElement.innerHTML = markup;
23: } else {
24: doc.body.innerHTML = markup;
25: }
26: return doc;
27: } else {
28: return real_parseFromString.apply(this, arguments);
29: }
30: };
31: }(DOMParser));

真正在使用时,我们可能不希望返回的是一个完整的 Document, 而仅仅是一个 html 片段,那采用下面的代码也许更方便
1: function parseStringToHTML(text) {
2: var i, a = document.createElement("div"),
3: b = document.createDocumentFragment();
4: a.innerHTML = text;
5: while (i = a.firstChild) b.appendChild(i);
6: return b;
7: }
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
谁能给个单机版的风云之雄霸天下啊?? 求风云雄霸天下PC单机游戏WIN7版 雄霸天下任务指南 开心网001老房子卖了以后家具还有吗? 为什么001开心网买房子组件删除仓库里的东西都没了 请教一下,开心001的开心庄园里面的建材有好多富余的的 除了5元一个卖... 开心网001小号怎么给大号送房子? 开心网001多少级能送别人房子?多少级能接受别人给的房子? 开心网001果实或家具能送人吗 开心网(kaixin001)怎么买外地房子? 被盗,删了所有好友,怎么能找回来!?急救!!! 被盗,申述找回的时候要好友验证,但是好友也被删完了,要怎么才能找回啊? 四物汤怎么熬,一副熬几回,一天喝几回 被盗好友被删怎么找回 幸福树要怎么养?我办公室桌上放的幸福树小盆栽都枯死了。 别人给我打电话怎么显示外卖,怎么取消? 被盗好友被删怎么找回 2022年珠海市公务员降薪了吗 电动升降机移动传动是依靠什么实现的? 珠海公务员考试时间2023 老师你好,我问下,公司法人股东向公司借款,需要借款协议吗?借款用途怎么写? 免费起名字大全 我姓安,儿子2010年10月27日凌晨4点出生,求三个字的名字,谢谢! 我是84年农历4月初5我的星座是什么? 1999年农历4月初5是什么星座 阴历4月初5是什么星座 4月初5是什么星座 2007年阴历4月初5日是什么星座 属大龙,农历4月初5是什么星座? 1991年农历4月初5出生是什么星座 1979年阴历4月初5是什么星座 什么借钱简单快速呢 用那个借款软件够好,又方便,又快 用那个平台借钱最好最快 最简单 只需要实名认证的 操作最简单的小额借钱app有哪些? 长安cx20油针到底还有多少油? 夏利n7和长安cx20哪个好 长安CX20 2015年6月生产的,发动机型号JL473Q1 , 发动机最大净功率70kw,是1.4排量吗? 性能会怎么样 学校要查手机,有人说用的是什么专门用来探测手机内部金属的探测器。请问有这种探测器吗? 长安cx20油耗表显示7.2正确吗? 有什么东西可以检测手机硬件有没有损坏? 新车长安CX20耗油量大怎么回事? 750块钱才跑1200公里。 11款长安cx20油箱警示灯点后还可跑多少公里? 长安新奔奔和长安新款cx20哪个好 长安CX20和欧力威哪个好 双方协议书怎么签? 什么颜色的衣服和裤子配灰色鞋子啊? 2015男羊宝宝生辰八字缺金取什么名字好? 关于牙齿有些松动,担心掉落的咨询 我18岁,这几天1颗牙齿松动,今天这颗牙齿完全脱落,谁能给个好点的建议,是该镶牙还是怎么办? 2013年正月十二晚十点三十六出生缺金该取什么名字?男孩,姓刘。