<a>
外部のJavaScriptを介してコンテンツが読み込まれる空白のタグがあります。を観察したいのですが<a>
、その内容が変更されたときに別のタスクを実行します。コンテンツは一度だけ変更されます。
これはできますか?
私はjQueryも使用しています。
前もって感謝します
<a>
外部のJavaScriptを介してコンテンツが読み込まれる空白のタグがあります。を観察したいのですが<a>
、その内容が変更されたときに別のタスクを実行します。コンテンツは一度だけ変更されます。
これはできますか?
私はjQueryも使用しています。
前もって感謝します
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/
参照:DOMNodeInserted、DOMAttrModified
上記の解決策は実際にはかなり便利ですが、これらのイベントをサポートするブラウザーでのみ機能します。より一般的なソリューションを得るには、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
タグの.html()を監視して、タグが他の何かに変更されているかどうかを確認できます...
おそらく、要素のコンテンツ(.html())が変更されるまで監視し、その後監視を停止する時間指定関数(n秒ごとに実行)があります。たぶん、次のようなものがあります。
var monitor = true;
var doMonitor = function() {
monitor = $("#theanchor").html() != "the initial value";
if (monitor)
setTimeout(doMonitor,500);
};
setTimeout(doMonitor,500);
理論的にはこれでうまくいくはずですが、私はテストしていません。
DOMSubtreeModifiedイベントを利用できます。そのイベントは、コンテンツが変更されたときに要素で発生します。
$('a').bind('DOMSubtreeModified', function() {
// contents changed
});
注:このイベントは、Operaおよび古いバージョンのIEでは発生しません(ただし、IE9では機能します)。
ライブデモ: http: //jsfiddle.net/simevidas/pLvgM/
タグの内容とはどういう意味ですか?あなたはそのようにこれを行うことができます:
$('#linkElementID').html();
または、次のような属性を取得します。
$('#linkElementID').attr("title"); //Title Attribute
$('#linkElementID').attr("href"); //href Attribute etc etc
タグが変更されたときに発生するイベントはないと思い.change()
ます。イベントは入力領域と選択リストによってのみ発生します。
新しく挿入されたコンテンツをロードするイベントの後で確認する必要があります。