153

これが私が扱うようになる大まかなHTMLです:

<li class="par_cat"></li>
<li class="sub_cat"></li>
<li class="sub_cat"></li>
<li class="par_cat"></li> // this is the single element I need to select
<li class="sub_cat"></li>
<li class="sub_cat"></li>
<li class="sub_cat current_sub"></li> // this is where I need to start searching
<li class="par_cat"></li>
<li class="sub_cat"></li>
<li class="par_cat"></li>

私はからトラバースし.current_sub、最も近い前のものを見つけて、それに何かをする必要があり.par_catます。

.find("li.par_cat")の全負荷を返します.par_cat(ページに約30があります)。私は単一のものをターゲットにする必要があります。

4

5 に答える 5

273

試す:

$('li.current_sub').prevAll("li.par_cat:first");

マークアップでテストしました:

$('li.current_sub').prevAll("li.par_cat:first").text("woohoo");
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
  <li class="par_cat"></li>
  <li class="sub_cat"></li>
  <li class="sub_cat"></li>
  <li class="par_cat">// this is the single element I need to select</li>
  <li class="sub_cat"></li>
  <li class="sub_cat"></li>
  <li class="sub_cat current_sub">// this is where I need to start searching</li>
  <li class="par_cat"></li>
  <li class="sub_cat"></li>
  <li class="par_cat"></li>
</ul>

最も近い前のli.par_cat部分を「woohoo」で埋めます。

于 2010-02-22T10:42:13.660 に答える
15

試す

$('li.current_sub').prev('.par_cat').[do stuff];
于 2010-02-22T10:45:17.510 に答える
14

prevUntil()を使用すると、すべてを取得しなくても、遠くの兄弟を取得できます。prevAll()を使用すると、CPUを集中的に使用する特に長いセットがありました。

var category = $('li.current_sub').prev('li.par_cat');
if (category.length == 0){
  category = $('li.current_sub').prevUntil('li.par_cat').last().prev();
}
category.show();

これは、一致する場合は最初の先行する兄弟を取得し、一致しない場合は一致するものの先行する兄弟を取得するため、prev()を使用してもう1つバックアップし、目的の要素を取得します。

于 2012-11-09T22:27:43.960 に答える
5

私はすべての答えが何かを欠いていると思います。私はこのようなものを使うのが好きです

$('li.current_sub').prevUntil("li.par_cat").prev();

セレクター内に:firstを追加しなくても済み、読みやすく、理解しやすくなります。prevUntil()メソッドは、prevAll()を使用するよりもパフォーマンスが優れています。

于 2016-11-08T13:51:55.677 に答える
0

あなたはこのコードに従うことができます:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
    $(document).ready(function () {
        $(".add").on("click", function () {
            var v = $(this).closest(".division").find("input[name='roll']").val();
            alert(v);
        });
    });
</script>
<?php

for ($i = 1; $i <= 5; $i++) {
    echo'<div class = "division">'
        . '<form method="POST" action="">'
        . '<p><input type="number" name="roll" placeholder="Enter Roll"></p>'
        . '<p><input type="button" class="add" name = "submit" value = "Click"></p>'
        . '</form></div>';
}
?>

これからアイデアを得ることができます。

于 2018-09-19T04:42:59.820 に答える