[メンバートニーによって研究への応答で編集]
したがって、追加のコードなしで、これはブラインドショットのビットでありますしかし、私にはここで考えるべき2つのことがあるようです:1.デフォルトのブラウザのツールチップの動作。 2.潜在的に更新されるDOMとカスタムツールチップが機能し続ける能力。
#1:についてカスタムイベントを要素にバインドすると、ツールチップが表示されないようにevent.preventDefault()
を使用できます。これは正しく動作しません。したがって、 "title"属性を使用したまま使用する場合の回避策は、値を取得してデータオブジェクト($.data()
関数)にプッシュし、空の文字列(removeAttrが矛盾している)でタイトルをnullにすることです。その後、mouseleaveで、データオブジェクトから値を取得し、タイトルに戻します。この考え方はここから来ます:How to disable tooltip in the browser with jQuery?
#2について:DOM変更に再バインドするのではなく、破壊されることは決してないリスナー要素に一度だけバインドする必要があります。通常、これは何らかのコンテナ要素ですが、実際には包括的なコンテナが必要な場合はdocument
(現在は非推奨の.live()
となります)でもかまいません。ここに私自身の工夫のいくつかの偽のマークアップを使用するサンプルです:
<div class="section">
<a href="#" title="foo">Hover this foo!</a>
<div id="notatooltip"></div>
</div>
そして、フィドルはこちらです::(ちょうどこの例)
var container = $('.section');
container.on('mouseenter', 'a', function() {
var $this = $(this);
var theTitle = $this.attr('title');
$this.attr('title', '');
$('#notatooltip').html(theTitle);
$.data(this, 'title', theTitle);
});
container.on('mouseleave', 'a', function() {
$('#notatooltip').html('');
var $this = $(this);
var storedTitle = $.data(this, 'title');
$this.attr('title', storedTitle);
});
私の非現実的なマークアップはここにあるhttp://jsfiddle.net/GVDqn/ または一部をhttp://jsfiddle.net/GVDqn/1/
これを行うにはもっと最適な方法があります(2つの別々のイベントを1つのセレクタで2つの別々の関数にバインドできるかどうかは正直に研究していませんでしたが)。
DOMの変更に基づいて再バインドする必要はありません。委任されたリスナーは自動的にそれを処理します。そして、それを防ぐだけで、デフォルトのツールチップの機能を妨げることができるはずです。
可能重複[DOMが変更されたときを識別する方法?](http://stackoverflow.com/questions/3744706/how-to-identify-when-the -dom-has-been-changed) –
は、DOMのあらゆる変更を聴き取るように思えますし、毎回あなたの要素を検索するのは本当に高価になるでしょう。 – charlietfl
[jQuery DOMの変更リスナーはありますか?](http://stackoverflow.com/questions/2844565/is-there-a-jquery-dom-change-listener) – APerson