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を呼び出すイベントにもう 1 つのハンドラーを追加する方法がありaddThisます。

于 2013-11-09T07:38:14.727 に答える