13

<a>外部のJavaScriptを介してコンテンツが読み込まれる空白のタグがあります。を観察したいのですが<a>、その内容が変更されたときに別のタスクを実行します。コンテンツは一度だけ変更されます。

これはできますか?

私はjQueryも使用しています。

前もって感謝します

4

4 に答える 4

6

jQuery && DOMレベル3イベントを組み合わせて使用​​できます(以下のブラウザーサポートを参照)。

コンテンツ内の変更を確認する場合は、次のようにします。

var $a = $('a');

$a.one('DOMNodeInserted', function(e) {
    console.log('content changed!: ', e);    

    console.log('new content: ', $(this).html());   
});

$a.one('DOMAttrModified', function(e) {
    console.log('attribute changed!: ');        

    console.log('attribute that was changed: ', e.attrName);
});

このコードの動作をご覧ください:http://jsfiddle.net/wJbMj/1/

参照DOMNodeInsertedDOMAttrModified


上記の解決策は実際にはかなり便利ですが、これらのイベントをサポートするブラウザーでのみ機能します。より一般的なソリューションを得るには、jQuerysセッターメソッドにフックします。このソリューションの欠点は、jQueryを介して行われた変更のみをキャッチできることです。

var _oldAttr = $.fn.attr;
$.fn.attr = function() {
    console.log('changed attr: ', arguments[0]);
    console.log('new value: ', arguments[1]);
    return _oldAttr.apply(this, arguments);
};

まったく同じ方法で.text()フックすることができます。上書きされたメソッド内の値が正しいDOMnodeを表している.html()かどうかを確認する必要があります。this

于 2011-03-01T13:20:02.673 に答える
5

タグの.html()を監視して、タグが他の何かに変更されているかどうかを確認できます...

おそらく、要素のコンテンツ(.html())が変更されるまで監視し、その後監視を停止する時間指定関数(n秒ごとに実行)があります。たぶん、次のようなものがあります。

var monitor = true;
var doMonitor = function() {
  monitor = $("#theanchor").html() != "the initial value";
  if (monitor)
    setTimeout(doMonitor,500);
};
setTimeout(doMonitor,500);

理論的にはこれでうまくいくはずですが、私はテストしていません。

于 2011-03-01T13:08:52.220 に答える
3

DOMSubtreeModifiedイベントを利用できます。そのイベントは、コンテンツが変更されたときに要素で発生します。

$('a').bind('DOMSubtreeModified', function() {
    // contents changed   
});

注:このイベントは、Operaおよび古いバージョンのIEでは発生しません(ただし、IE9では機能します)。

ライブデモ: http: //jsfiddle.net/simevidas/pLvgM/

于 2011-03-01T13:17:32.613 に答える
0

タグの内容とはどういう意味ですか?あなたはそのようにこれを行うことができます:

$('#linkElementID').html();

または、次のような属性を取得します。

$('#linkElementID').attr("title"); //Title Attribute 
$('#linkElementID').attr("href"); //href Attribute etc etc 

タグが変更されたときに発生するイベントはないと思い.change()ます。イベントは入力領域と選択リストによってのみ発生します。

新しく挿入されたコンテンツをロードするイベントの後で確認する必要があります。

于 2011-03-01T13:09:58.757 に答える