0

期待される結果は、最初に選択されたdivと最後に選択されたdivの間のすべての特別なdivを赤くすることです。

これは機能しますが、より適切に記述できませんでしたか?:

var s = $('div.selected'),
    $spec = $('.speial'),
    i = s.first().index('.speial'),
    last = s.last().index('.speial');
for(;i<last;i++){
  $spec.eq(i).addClass('gored');
}

私はこれを試していました:

var s = $('div.selected'),
    $spec = $('.speial'),
    i = s.first().index($spec),
    last = s.last().index($spec);
for(;i<last;i++){
  $spec.eq(i).addClass('gored');
}

しかし、それは機能しません...私はその理由に興味があります。それとも、同じ結果を達成するためのさらに良い方法はありますか?

編集:私は問題の写真を撮るためにフィドルを作りました:)フィドル

4

4 に答える 4

1

HTMLを見ずにあなたが欲しいものを正確に伝えるのは難しいです

gored私がこれを間違えたかどうかを明確にしてください。しかし、クラスをすべての.speial内に追加したいようですdiv.selected

この場合、これは簡単です。

$('div.selected .speial').addClass("gored");

これは間違っているかもしれないと言ったので、あなたが望むものを平易な英語で(できればHTMLスニペットで)正確に明確にしてください。

于 2012-08-16T12:51:59.580 に答える
0

CSS:first-childおよび:last-childセレクターを使用してみてください

于 2012-08-16T12:52:36.520 に答える
0

これを試して

    $('div.selected:not(:first):not(:last)').addClass('gored');

フィドルを見る

于 2012-08-16T12:56:52.217 に答える
0

jQuery APIドキュメント:

要素のコレクションで.index()が呼び出され、DOM要素またはjQueryオブジェクトが渡された場合、.index()は、元のコレクションに対する渡された要素の位置を示す整数を返します。

セレクター文字列が引数として渡された場合、.index()は、セレクターによって一致した要素に対するjQueryオブジェクト内の最初の要素の位置を示す整数を返します。要素が見つからない場合、.index()は-1を返します。

ですから、どちらの場合も最初は相対性理論を誤解していたようですので、「セレクターに一致する要素」はselection(jQueryオブジェクト)に置き換えられるのではないかと思いました。

答えは、.index()が予想とは異なる方法で機能するということです。

于 2013-01-17T14:24:15.163 に答える