我想知道是否有办法在DOM中获取已删除元素或窗口对象的“历史记录”?
例如,在页面加载期间删除自己的脚本标记。
<script id='deleteme'>
document.getElementById('deleteme').remove()
</script>
从DOM中删除后,有没有办法获取此脚本标记?
由于
答案 0 :(得分:2)
删除dom结构中的元素时会触发DomNodeRemoved事件。它可用于捕获已删除的信息,但您必须手动维护历史记录。
有关如何使用它的一些示例,请参阅here。
修改强>
不推荐使用变异事件,并且变异观察者可以替代它。 Mutation Observers可用于观察DOM中任何级别的DOM结构更改,并在检测到更改时执行回调。 David Walsh的blog解释了相同的内容。
答案 1 :(得分:1)
这太可怕了,变异观察者是一个很多更好的想法,但你总是可以对JavaScript进行热补丁:)
(function() {
window.removeHistory = [];
var oldRemove = HTMLElement.prototype.remove;
HTMLElement.prototype.remove = function() {
removeHistory.push({
element: this,
parent: this.parentNode,
timestamp: new Date()
})
oldRemove.apply(this, arguments);
};
})();
document.getElementById('first').remove();
document.getElementById('second').remove();
console.log(removeHistory);
<!-- results pane console output; see http://meta.stackexchange.com/a/242491 -->
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
<div id="parent">
<p id="first">First</p>
<p id="second">Second</p>
</div>
这仅适用于锻炼和/或快速和脏调试。不要使用这是生产代码,否则你会被grue吃掉。