次のようなJavaScriptでTwitterブートストラップツールチップを使用しています。
$('a[rel=tooltip]').tooltip();
私のマークアップは次のようになります:
<a rel="tooltip" title="Not implemented" class="btn"><i class="icon-file"></i></a>
これは正常に機能しますが、<a>
要素を動的に追加し、それらの動的要素のツールチップが表示されません。ドキュメントが典型的なjquery $(document).ready(function()
機能でロードされたときに一度だけ.tooltip()をバインドするためです。
これを動的に作成された要素にバインドするにはどうすればよいですか?通常、私はjquery live()メソッドを介してこれを行います。しかし、バインドに使用するイベントは何ですか?ブートストラップ.tooltip()をjquery .live()に接続する方法がわからないだけです。
この作業を行う1つの方法は次のようなものです。
/* Add new 'rows' when plus sign is clicked */
$("a.add").live('click', function () {
var clicked_li = $(this).parent('li');
var clone = clicked_li.clone();
clone.find(':input').each(function() {
$(this).val('');
});
clicked_li.after(clone);
$('a[rel=tooltip]').tooltip();
});
これは機能しますが、一種のハックのようです。また、$(ready)呼び出しでまったく同じ.tooltip()行を呼び出しています。では、ページが最初に読み込まれてセレクターに一致するときに存在する要素は、ツールチップで2回表示されるのでしょうか。
私はこのアプローチで何の問題も見ていません。私は、行動のベストプラクティスまたは理解を求めています。
rel
属性を乗っ取るのは悪いスタイルだと思います。これは非セマンティックで、10年以上前にハッキングとして発生しました。現在、数年前に戻ったすべてのブラウザーはdata-*
属性をサポートしており、それらを使用しない理由はもうありません。