このコードは機能していません。 this+'>a'
は有効な構文ではありません。では、どうすればthis
の子のクラスを追加/削除できますか?この場合、a
要素。
jQuery(function ($) {
$("nav.menu>ul>li").hover(
function () {
$(this+'>a').addClass("hover_triangle");//error
},
function () {
$(this+'>a').removeClass("hover_triangle");//error
});
});
できませんnav.menu>ul>li>a
メニュー内のすべてのa
要素を選択するため。
$(this).children('a').addClass('hover_triangle');
そして完全なコードで:
jQuery(function($) {
$('nav.menu>ul>li').hover(function() {
$(this).children('a').addClass('hover_triangle');
},function() {
$(this).children('a').removeClass('hover_triangle');
});
});
.find()
を使用できます
_$(this).find('> a').addClass("hover_triangle");
_
これは、_nav.menu>ul>li
_の直接の子要素にのみアクセスします
直接の子を選択したい場合は、.find('a')
はネストされたアンカーも取得します。これを回避するには、.find('> a')
または.children('a')
のいずれかを使用する必要があります。
$('a', this)
を使用すると、this
オブジェクトの内部のみを確認できます。
jQuery(function ($) {
$("nav.menu>ul>li").hover(
function () {
$('a', this).addClass("hover_triangle");//error
},
function () {
$('a', this).removeClass("hover_triangle");//error
});
});
$(this).find('a').addClass('hover_triangle')
-直接の子である必要がないため、より一般的な方法
this
の子孫を検索する方法は2つあります。ほとんどがfind()
(そして読みやすい)で応答しましたが、jqueryセレクターはcontext
である2番目の引数を持つこともできます。
$('a', this)
は別の構文であり、$(this).find('a)
と同じです。内部的には、jQueryは最初のケースを取り、とにかくfind()
を使用しますが、構文は有効であり、多くの人がそれを使用します
API参照:jQuery(セレクター[、コンテキスト])