PHP で構築されたナビゲーション メニューがあり、現在の場所の画像が異なるため、ユーザーは自分の場所を知ることができます。
この関数では、次の HTML 属性を出力しています。
を設定するにはtd id
:
$menu_output .= '<tr><td id="nav_buttons">';
img id
およびユーザー定義を設定するにはimg data-id
:
$menu_output .= '" id="alt" data-id="yes';
関数には次のビットもあります。
...
if ($current_page == $key) {
$menu_output .= $image_dir . $ds . $page_nav_alt[$key];
$menu_output .= '" id="alt" data-id="yes';
}
else {
$menu_output .= $image_dir . $ds . $page_nav[$key];
}
$menu_output .= '" border="0" height="19" width="129"></a></td>';
タグ付けのために現在のページを yes に設定します。
基本的に、リンクと画像の 2 つの配列を指定し、現在のページには強調表示された画像があります。このメニューはうまく機能しているようで、しばらく使用しています。
最近、この機能に加えて、jQuery でホバー オーバー エフェクトを取得できるように変更したいと考えています。私の考えでは、それはどれほど難しいでしょうか?うーん、想像以上に大変でした。私は決して JavaScript や jQuery の専門家ではないので、これを台無しにしても驚くことはありません。
これは、私が使用しているjQueryであり、期待される結果が得られません:
$(document).ready(function() {
var test = $('#alt').attr('data-id');
if (test != 'yes'){
$('#nav_buttons img').hover(function() {
this.src = this.src.replace('_dark', '_light');
},
function() {
this.src = this.src.replace('_light', '_dark');
});
}
else {
$('#nav_buttons img').hover(function() {
this.src = this.src.replace('_light', '_dark');
},
function() {
this.src = this.src.replace('_dark', '_light');
});
}
});
これは if 部分ではうまくいくようですが、else ブランチは私が思っていたことをしません。リンクが明るくなり、ホバーすると、上が暗くなり、次に明るくなります。
Firefox で要素を調べると、クラス ID と属性は設定したものです。たとえば、強調表示されたリンクは yes に設定され、他のリンクは設定されていません。else ブランチを除いて、すべてが機能しているようです。私は何が欠けていますか?
編集
ホームページが公開されていた当時のページソースを調べてみたら、暗いイメージに見えるので「_dark」だろうと思っていたのですが、ソースは「_light」イメージとのこと。しかし、Firefox で要素を調べると、alt 属性を持つ「_dark」画像であることがわかります。予想どおり、PHP がページにデータを書き込んでおり (サーバーから派生)、jQuery がそれに基づいて動作している (DOM を変更している) と思いますが、正しく再生することはできません。ホバーイベントの後にjQueryで画像を設定して、本来のように見えるようにする必要があると思います。これらを希望どおりに機能させるにはどうすればよいですか?
編集2
.attr()
および.data()
jQuery メソッドが機能しない理由がわかったと思います。ドキュメントによると、これらはコレクションの最初の要素で機能します。それとも私はそれを誤解していますか?したがって、基本的に、PHP は要素を適切な場所に適切な値で書き込みますが、要素を検査すると、異なる値が得られます。これにより、ホバー/置換が正しく機能しなくなっているようです。
少し単純なこのバリエーションを試しました:
var test = $('img').data('id');
そして、PHP にタグの直後に配置するように指示test
したものと等しいかどうかをテストします。しかし、何らかの理由で変数を警告すると、まだ未定義になっています。おそらく、タグ属性の順序のためです。alt
img
test
img
PHP 開発者がこれを回避し、PHP と jQuery をうまく連携させるにはどうすればよいでしょうか? この種の競合は、jQuery を使用する PHP サイト全体で見られるようです。