【发布时间】:2019-12-29 00:57:09
【问题描述】:
我刚刚注意到浏览器忽略了HTML格式(比如对齐这个sn-p中的两个属性):
<div id="container">
<div id="contained"
other-prop="some value">
</div>
</div>
如果你跑了
var container = document.getElementById('container');
console.log(container.innerHTML);
你得到输出
<div id="contained" other-prop="some value">
</div>
在源代码中如何编写或直接在 JavaScript 中设置 .innerHTML 都没有关系。
是否可以像用户用JS写的一样查询一个元素对应的页面源?有空白和一切。当用户使用 DOM 操作修改元素时,我可以看到存在问题,在这种情况下,我仍然会很高兴
- 保留原始用户格式以用于未修改的所有内容,或
- 可以在用户在页面加载时编写原始源代码,而无需修改 DOM
一个 sn-p,以便您可以看到它的实际效果:
var container = document.getElementById('container');
console.log(container.innerHTML);
container.innerHTML = `
<div id="contained"
other-prop="some value">
</div>
`;
console.log(container.innerHTML);
container.children[0].setAttribute('modification', '');
console.log(container.innerHTML);
<div id="container">
<div id="contained"
other-prop="some value">
</div>
</div>
【问题讨论】:
-
无法读取浏览器用来组成页面的流。
-
@TravisJ 有什么参考资料吗? (在文档的某处提到/另一个 SO 线程...?)
-
在应用程序级别读取流。对此没有“文档”,因为它本质上是常识,就像没有文档说明 JavaScript 无法从网页访问注册表一样。访问流将退出沙箱,并且本质上意味着您已经获得了对指令执行的操作系统级别的访问权限,因为这是应用程序执行的位置。
-
@TravisJ 得到了你。是不是浏览器也不会通过一些API暴露流的内容?
-
@PeeyushKushwaha 浏览器不会在任何 API 中暴露页面的原始数据。我知道的唯一方法是使用
fetch请求查询页面的文本内容,然后使用 RegEx 或indexOf()在该文本中查找元素,正如我在回答中总结的那样。跨度>
标签: javascript dom html-parsing