1

我正在使用不想修改的第三方脚本。

在这个脚本中,我需要监听一个函数,它将一个类添加到一个 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
}
4

2 回答 2

1

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

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

_showElement(); // hijacked


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

不幸的是,我认为您无法保存该函数的原始行为,因此您需要复制粘贴它:

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

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

https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver

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

于 2013-11-09T09:35:04.583 回答
0

你不能直接这样做。你不能听像 dom 属性改变这样的事件。但是,有一种方法可以识别触发事件,_showElement并将一个处理程序附加到应该调用addThis函数的事件。

于 2013-11-09T07:38:14.727 回答