6

2番目に近いdivを見つけるにはどうすればよいですか?

たとえば、最も近いものを取得するために、私は正常に使用しています:

var closest_div_id = $(this).closest('div').attr('id');

では、2番目に近いものを取得するにはどうすればよいですか?何かのようなもの:

$(this).(closest('div').closest('div')).attr('id'); ???
4

3 に答える 3

15

thisが要素ではないと仮定すると<div>、セレクターをparents()に渡して、次のように記述できます。

var secondClosestId = $(this).parents("div").eq(1).attr("id");

parents()外側の祖先に最も近いものから順序付けられた祖先を返すため、eq()ここで使用できます。一般的なケースについては、この質問を参照してください。

于 2012-07-10T19:44:53.350 に答える
2

jQuery#closest()は、セレクターと一致する場合、現在の要素を返します。したがって、@ Fredericによって提案されたようにjQuery#parents()を使用するか、手動で1つの要素を上げることができます。

$(this).closest('div').parent().closest('div').attr('id');

そうは言っても、コードに別の問題がありました。2つのclosest()呼び出しを括弧で囲みました。これは、これら2つの呼び出しが他の呼び出しよりも先に評価されるという効果があります。スコープ内に最も近いと呼ばれる関数がない可能性があるため、指定されたコードはReferenceErrorで失敗します。

(これは、最初のコードが失敗した理由の説明としてのみ提供しています。実際には、@ Fredericの提案に従う必要があります)

于 2012-07-10T19:50:05.103 に答える
0

よりも優れたパフォーマンスを得るにはeq、次を使用できますslice

var secondClosest = $(this).parents("div").slice(1, 2).attr('id');
于 2012-07-10T19:53:35.240 に答える