4

たぶん、タイトルは私の質問が何であるかを実際に述べていませんでした。

<ul>
    <li>A</li>
    <li>B</li>
    <li class="test">C</li>
    <li>D</li>
</ul>

私がやろうとしているのは、クラス「test」を持つ要素の隣接する兄弟に背景色を適用することです。それ自体も、全部で3つが背景色になります。だから私は次のことをしなければなりません。

    $('ul li.test').each(function(){
        $(this).prev().css('background','red');
        $(this).css('background','red');
        $(this).next().css('background','red');
    });

これはかなり醜いコーディングだと思います。$(prev、this、next).somefunction()のようなことをする方法はありますかありがとう

4

5 に答える 5

2

.add()一致する要素のセットに要素を追加するために使用できます。

$(this).add($(this).prev()).add($(this).next()).css('background','red');

または.addBack().andSelf()1.8より前のjQueryバージョンの場合):

$(this).prev().addBack().next().addBack().css('background','red');
于 2013-03-26T22:50:04.140 に答える
1

使用する.end()

$(this).prev().css('background','red')
       .end().css('background','red')
       .next().css('background','red');
于 2013-03-26T22:48:42.967 に答える
0

変数を作成して選択範囲をキャッシュし、それにスタイルを適用できます。

var $this = $(this);
var elements = $this;
elements.add($this.prev());
elements.add($this.next());

elements.css('background','red');
于 2013-03-26T22:51:03.287 に答える
0

Next Adjacent Selectorを使用して、2つを一緒に圧縮できます

$(".test, .test + li").css("background-color","#F00");

私も試してみ$("li + .test")ましたが、うまくいきませんでした

編集:

$("li + .test")動作しますが、要素を選択し.testます。以前の隣接するセレクターはないようですが

お役に立てれば

于 2013-03-26T22:57:44.703 に答える
0

わかりました。おそらく、cssの練習にjQueryを参加させて、次のようにしようと思います。

CSS

.test,
.test + li {
  background: red;
}

jQuery

$('.test').prev().css('background','red');

しかし、もっとクリーンな解決策があるのだろうかと思います。:)

于 2013-03-26T23:09:19.007 に答える