3

誰かが以下を置き換える理由を説明してもらえますか

$('.post_title a').hover(function () {
    $(this).parent().parent().parent().parent().find(".post_footer").toggleClass('footer_border')
});

$('.post_title a').hover(function () {
    $(this).closest(".post_footer").toggleClass('footer_border')
});

動作しませんか??

4

3 に答える 3

6

のドキュメントを.closest()参照してください。それは次のように述べています:

一連の DOM 要素を表す jQuery オブジェクトを指定すると、 .closest()メソッドは DOM ツリー内のこれらの要素とその祖先を検索し、一致する要素から新しい jQuery オブジェクトを構築します。と.parents(). closest()メソッドは、どちらも DOM ツリーをたどるという点で似ています。

探している要素はリンクの祖先ではないため、機能しません。必要なものを達成するには、代わりにこれを使用できます。

$(this).parents().next('.post_footer').eq(0).toggleClass('footer_border');
于 2012-01-08T16:45:11.413 に答える
3

closest()要素の最も近い直接の親を見つけるために使用されます。

最初の例でfind()は、現在の要素の親内の要素を見つけるために使用します。closest()これが失敗する理由です-.post_footer現在の要素の直接の親ではありません。

コードの HTML 構造を投稿していただければ、これを解決する方法の詳細を提供できます。

于 2012-01-08T16:42:46.273 に答える
0

これをやってみて...

$('.post_title a').hover(function () {
    $(this).closest(PARENT_OF_POST_FOOTER_SELECTOR)
        .find(".post_footer").toggleClass('footer_border')
});

これは、PARENT_OF_POST_FOOTER_SELECTOR が定義されていることを前提としています。

于 2012-01-08T16:51:05.770 に答える