侦听Javascript中的函数

侦听Javascript中的函数,javascript,Javascript,我使用的是我不想修改的第三方脚本 在这个脚本中,我需要监听一个函数,它向dom节点添加一个类 function _showElement(targetElement) { targetElement.element.className += 'this-class'; } 我想做的是监听这个元素的调用,以及每当它使用纯javascript向其父级添加类时 function addThis() { var doc = document; liveEl = do

我使用的是我不想修改的第三方脚本

在这个脚本中,我需要监听一个函数,它向dom节点添加一个类

  function _showElement(targetElement) {
      targetElement.element.className += 'this-class';
  }
我想做的是监听这个元素的调用,以及每当它使用纯javascript向其父级添加类时

function addThis() {
    var doc = document;
    liveEl = doc.getElementsByName("this-class");
    // Code to add class to parent
}

你不能直接这么做。您无法侦听dom属性更改之类的事件。但是,有一种方法可以识别触发的事件
\u showElement
,并向事件附加一个处理程序,该处理程序应调用
addThis
函数。

您不能直接执行此操作。您无法侦听dom属性更改之类的事件。但是,有一种方法可以识别触发的事件
\u showElement
,并在事件上附加一个处理程序,该处理程序应调用
addThis
函数。

最简单的“暴力”解决方案是劫持(重新定义)函数:

function _showElement(targetElement) {
  console.log('original');
}

_showElement(); // hijacked


function _showElement(targetElement) {
  console.log('hijacked');
}
不幸的是,我认为您无法保存函数的原始行为,因此您需要复制粘贴它:

function _showElement(targetElement) {
  targetElement.element.className += 'this-class';
  addThis()
}

另一种解决方案,更具体地针对您的问题(当元素的类名更改时执行某些操作),您可以侦听DOM上的突变事件:

基本上,您可以创建一个MutationObserver并观察元素上的属性更改。如果需要跟踪所有节点,这可能不是一个很好的解决方案,但在某些情况下,它可能会派上用场。

最简单的“暴力”解决方案是劫持(重新定义)函数:

function _showElement(targetElement) {
  console.log('original');
}

_showElement(); // hijacked


function _showElement(targetElement) {
  console.log('hijacked');
}
不幸的是,我认为您无法保存函数的原始行为,因此您需要复制粘贴它:

function _showElement(targetElement) {
  targetElement.element.className += 'this-class';
  addThis()
}

另一种解决方案,更具体地针对您的问题(当元素的类名更改时执行某些操作),您可以侦听DOM上的突变事件:


基本上,您可以创建一个MutationObserver并观察元素上的属性更改。如果需要跟踪所有节点,这可能不是一个很好的解决方案,但在某些情况下,它可能会派上用场。

您也可以保存原始节点,然后在修改后的函数中调用它。您当然也可以保存原始文件,然后在修改后的函数中调用它。