引子:最近在寫一個插件兔簇,想辦法干掉 CSDN 中不登錄無法復制的問題。找到了觸發(fā)登錄彈窗的方法:目標dom上綁定了 copy() 方法{ dom.bind('copy', () => {}) }边酒。 要移除這個方法狸窘。
找到一個比較殘暴的方案:克隆
克隆整個節(jié)點并使用克隆的替換該節(jié)點
dom.replaceWith(dom.cloneNode(true));
// dom 要被替換的元素
// true:參數(shù),為 true 時介杆,所有子元素也一并被克隆
1. 摧毀所有的監(jiān)聽和事件執(zhí)行(除行內(nèi)事件)
2. 內(nèi)部監(jiān)聽器(行內(nèi)事件)會被保留下來韭寸,這意味著一個onclick 屬性中的方法仍然會按照定義觸發(fā)
<button id="button" onclick="console.log('clicked!')"></button>
// button 的 onclick 屬性會被執(zhí)行