3

明確にするために:私は既存のフックを新しいDOM要素に配置する方法を尋ねていません。live()関数と古いlivequeryプラグインについて知っています。私は何か他のものを求めています。

私が知りたいのは、新しいDOM要素の作成そのものにフックする方法です。私が尋ねている理由は、ファーストパーティのスクリプトを制御できないサードパーティのユーザーJSスクリプトを作成しているからです。これらのファーストパーティスクリプト(難読化されている)は、新しいDOM要素を追加することによってページを定期的に更新します。これらの要素を追加してからコードを実行したい。

$('...').bind('ajaxSuccess'、function().....)を使用すると、一部の追加で機能しますが、すべてではありません。

4

3 に答える 3

2

それらが常に document.createElement メソッドで追加されている場合は、単純に置き換えて、そこで追跡を行うことができます。

document.replacedCreateElement = document.createElement;
document.createElement = function(tagName) {
    this.replacedCreateElement(tagName);
    //do your tracking  
}
于 2009-05-21T17:12:20.510 に答える
1

livequeryについて知っているかどうかを尋ねる理由がわかりません。Livequeryを使用すると、任意の新しい DOM 要素にフックできます。これ以外で私が知っている唯一のことは、DOM メソッド (appendChild など) にフックすることです。

jQuery に統合された live() 関数は、実際には完全な livequery 実装ではありません。(Resig は、コード サイズを大きくしすぎずに統合するには機能が多すぎると考えました)

live() に欠けているのは、次の型関数です。

$('*').livequery(function() {
 // do something
});

これを使用すると、追加をキャッチする必要があります。

于 2009-05-21T17:10:34.087 に答える
1

さて、私はこのペアを使用しました。これは、20 秒以内に目的の DOM 更新を開始するようです。

$( '#someid' ).bind( 'ajaxSuccess', function() { ... } );
$( '#someid' ).ajaxSuccess( function( e, r, s ) { ... } );

livequery に依存してページの読み込みを遅くする必要はなく、代わりの CreateElement ソリューションが CPU をスラッシングしました。

于 2009-05-21T18:09:42.470 に答える