ここに私が扱うラフ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個あります)。単一のものをターゲットにする必要があります。
どんなヒントでも本当に感謝します:)
試してください:
$('li.current_sub').prevAll("li.par_cat:first");
マークアップでテストしました:
$('li.current_sub').prevAll("li.par_cat:first").text("woohoo");
直前のli.par_cat
を「woohoo」で埋めます。
試してみる
$('li.current_sub').prev('.par_cat').[do stuff];
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つをバックアップし、目的の要素を取得します。
すべての答えには何かが欠けていると思います。私はこのようなものを使うことを好みます
$('li.current_sub').prevUntil("li.par_cat").prev();
セレクター内に:firstを追加せずに済むため、読みやすく、理解しやすくなります。 prevUntil()メソッドは、prevAll()を使用するよりもパフォーマンスが優れています
このコードに従うことができます:
<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>';
}
?>
これからアイデアを得ることができます。