来自 JSON 的字符串被写入为文本而不是 DOM 元素
string from json is being written as text and not as dom elements
document.getElementById("id").innerHTML = "<div>new div</div>";
写入一个新的div 元素没有问题,但是来自 JSON 的字符串:
document.getElementById("id").innerHTML = jsonData.data.children[i].data.media.oembed.html;
总是写成带引号的文本!
(ie: "<iframe></iframe").
屈服:
<div id="id">
"<iframe></iframe>"
</div>
而不是
<div id="id">
<iframe></iframe>
</div> //as expected
我不明白为什么。我想把这个字符串写到 el.innerHTML 作为一个不带引号的字符串,所以它就像一个简单的元素。
数据来自Reddit.json
样本:
html: "<iframe class="embedly-embed" src="//cdn.embedly.com/widgets/media.html?src=http%3A%2F%2Fwww.youtube.com%2Fembed%2FJq9JMm9h9cA%3Ffeature%3Doembed&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DJq9JMm9h9cA&image=http%3A%2F%2Fi.ytimg.com%2Fvi%2FJq9JMm9h9cA%2Fhqdefault.jpg&key=2aa3c4d5f3de4f5b9120b660ad850dc9&type=text%2Fhtml&schema=youtube" width="600" height="450" scrolling="no" frameborder="0" allowfullscreen></iframe>"provider_name: "YouTube"provider_url: "http://www.youtube.com/"thumbnail_height: 360thumbnail_url: "http://i.ytimg.com/vi/Jq9JMm9h9cA/hqdefault.jpg"thumbnail_width: 480title: "Good Doggy"type: "video"url: "http://www.youtube.com/watch?v=Jq9JMm9h9cA"version: "1.0"width: 600__proto__: Objecttype: "youtu.be"__proto__: Object
您正在访问的html
属性是 XML 编码的:
"html": "<iframe class='"embedly-embed'" src='"https://cdn.emb......
请注意开头的<
。
为了将其用作 HTML,您需要对其进行解码。执行此操作的一种方法是将其分配给.innerHTML
,将其检索为文本,然后再次将其分配给.innerHTML
:
var el = document.getElementById("id");
el.innerHTML = jsonData.data.children[i].data.media.oembed.html;
el.innerHTML = el.textContent; // assign it for a second time
强制性警告:确保您非常信任您在此处使用的内容的来源。如果源不可信,这会为您的网站打开 XSS 攻击。
相关文章:
- 如何在浏览器中选择所有*renderable*文本元素
- 如何使用RaphaelJS将文本元素约束在正方形中
- 使用d3.js删除svg文本元素
- 替换动态生成的文本元素
- Protractor测试:如何设置登录表单中文本元素的值
- 如何获取与提交表单上所选复选框相同行的文本元素
- SVG文本锚点设置使文本元素移动
- Svg文本元素被另一个Svg元素重叠
- Imacros替换文本元素
- Windows 8 上的 Safari 5 反转 SVG 上的所有文本元素
- 运行 PHP 代码以根据文本元素的值从数据库中获取值
- 我想要输入文本元素中的实时更改事件
- 如何使用 jQuery 忽略文本元素上的特定字符
- RaphaelJS中的文本元素不会在触摸设备上拖动
- d3 - 旋转数组中的文本元素
- 如何通过单击复选框将文本元素从输入复制到另一个输入
- .text() 给出元素中的所有文本元素
- 在函数内调用对象文本元素
- 移动文本元素与弧拉斐尔JS
- 编辑文本元素时,将重置后端用户设置