0

次のセレクターを使用して、特定の要素の内容を操作する Greasemonkey スクリプトを作成しました。

$("span.relativetime").each(function() { $(this).html("TEST"); });

ただし、一致する要素が AJAX を介してページに追加されることがあり、それらの新しい要素を処理する方法がわかりません。私はこれを試しましたが、うまくいきません:

$("span.relativetime").live(function() { $(this).html("TEST"); });

jQuery live()のドキュメントには、イベント (「クリック」など) が必要であると書かれています。しかし、私にはイベントがありません。セレクターに一致するものがいつ作成されたかを知りたいだけで、それを変更したいのです。

背景: StackOverflow の相対タイムスタンプを絶対ローカル タイムスタンプとして表示する Greasemonkey スクリプトでこの問題が発生しています。これは meta-SO にあります。問題は、[すべてのコメントを表示] をクリックすると、新しいコメントが AJAX によって追加され、それらのスクリプトのタイムスタンプを見つけて置き換える方法がわからないことです。

4

2 に答える 2

0

あなたが試すことができる1つのこと(それがうまくいくかどうかはわかりませんが)は、次のようなグローバル変数に選択をキャッシュすることです:

var $relativetime = $("span.relativetime");

次に、.each関数があります。

$relativetime.each(function() { $(this).html("TEST"); });

新しい要素がDOMに追加された後、キャッシュされたオブジェクトへの追加を再度選択できます。

$relativetime.append("<my html>"); //or
$("<my html>").appendto($relativetime); 

(Ps.html()はhtmlを設定するためのものです。テキストを設定するには、.text()

于 2009-08-10T17:32:37.520 に答える
0

StackOverflow のセットアップでは、コメントの後に何かを処理するのが面倒です。私が行ったことは、setTimeout を使用して要素が作成されるのを待ってから、それらを変更する [コメントの追加/削除] ボタンにバインドを配置することです。

于 2009-08-10T17:15:20.270 に答える