0

タイトルからツールチップを作成する機能があります。ツールチップを返す前にタイトルの長さをチェックするifステートメントでこの関数をラップしようとしています。しかし、それは何も返したくないようです。ifステートメントを使用してこれを行うためのより良い方法はありますか?

$(document).ready(function() {

 if ($('#menu-headermenu a').attr('title').length == 0) {

 return null;

} else {

//Select all anchor tag with rel set to tooltip
$('#menu-headermenu a').mouseover(function(e) {

    //Grab the title attribute's value and assign it to a variable
    var tip = $(this).attr('title');    

    //Remove the title attribute's to avoid the native tooltip from the browser
    $(this).attr('title','');

    //Append the tooltip template and its value
    $(this).append('<div id="tooltip"><p>Take me to:<p><div class="tooltipcontent"' + tip + '</div></div>');     

    //Set the X and Y axis of the tooltip
    $('#tooltip').css('top', e.pageY + 10 );
    $('#tooltip').css('left', e.pageX + 20 );

    //Show the tooltip with faceIn effect
    $('#tooltip').fadeIn('500');
    $('#tooltip').fadeTo('10',0.8);

}).mousemove(function(e) {

    //Keep changing the X and Y axis for the tooltip, thus, the tooltip move along with the mouse
    $('#tooltip').css('top', e.pageY + 10 );
    $('#tooltip').css('left', e.pageX + 20 );

}).mouseout(function() {

    //Put back the title attribute's value
    $(this).attr('title',$('div.tooltipcontent').html());

    //Remove the appended tooltip template
    $(this).children('div#tooltip').remove();

});

}
});
4

3 に答える 3

2

既存のソリューションの使用を検討しましたか?(例:http: //jquery.bassistance.de/tooltip/demo/

質問については、セレクターにフィルターを追加するだけです。$('#menu-headermenu a[title]')

これにより、title属性を持つ要素のみにイベントがアタッチされるようになります。

于 2012-05-02T04:48:58.320 に答える
1

個人的には、ドキュメントの準備ができたら、健全性チェックを行わずにマウスオーバー機能をまっすぐにバインドします。将来、Ajax呼び出しなどを追加する場合は、より柔軟になります。

$(document).ready(function() {
  $('#someWrapper').on('mouseover', '#menu-headermenu a', function(e) {
    // do stuff
  });
});

ここで、#someWrapperは、問題のアンカーリンクを含むと予測される要素です。IDを持つ要素である必要はありません。必要に応じて、「body」にすることもできますが、通常、ほとんどのドキュメントで適切なdivを識別できます。

これはすべて、「ねえ、#someWrapper...「#menu-headermenua」に一致する要素で発生するマウスオーバーをリッスンしますか?」と言うだけです。

'if'ステートメントロジックでは、セレクターを照合するためにDOMのインベントリを作成する必要があるため、イベントを#someWrapperにバインドするよりも計算コストが高くなる可能性があります。

[アップデート]

質問の一部を見逃しましたが、答えの元の部分はまだ残っています...関数内で、タイトルの存在またはタイトルの空の文字列の健全性チェックを実行します。

var title = $(this).attr('title');
if (title !== undefined && title !== "") { /* etc */ }
于 2012-05-02T04:48:19.267 に答える
1

[タイトル]だけを使用することはできないと仮定します...

ifcheckを各ステートメントでラップする必要があります。

$('#menu-headermenu a').each(function(){
  if($(this).attr('title').length === 0){
    ...
  }
});
于 2012-05-02T04:50:32.530 に答える