jquery在课堂上找到最近的兄弟姐妹

问题描述 投票:138回答:5

这是我开始使用的粗略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个)。我需要针对单一目标。

非常感谢任何提示:)

jquery html traversal tree-traversal
5个回答
243
投票

尝试:

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

用你的标记测试它:

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

将填写最近的li.par_cat与“呜呼”。


17
投票

试试

$('li.current_sub').prev('.par_cat').[do stuff];


13
投票

使用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()再一个来获得所需的元素。


5
投票

我认为所有的答案都缺乏一些东西。我更喜欢使用这样的东西

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

保存您不添加:首先在选择器内部,更容易阅读和理解。 prevUntil()方法也有更好的性能,而不是使用prevAll()


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>';
}
?>

你可以从中得到想法。

© www.soinside.com 2019 - 2024. All rights reserved.