我有一个父/子层次结构,子项具有动态长度。这意味着子节点可以是另一个节点的父节点等。
这是我的HTML:
<ul class="tree">
<li id="8587509197182534205xy9w" class="has-children showChildren">
<i class="fi-minus"></i>
<div class="checkboxFive">
<input type="checkbox" name="massTypeId" class="massTypeTreeId" id="t_8587509197182534205xy9w" value="8587509197182534205xy9w">
<label for="t_8587509197182534205xy9w"></label>
</div>
<span class="text">Sand</span>
<ul class="child">
<li id="8587509198220874655a1s8" class="has-children showChildren">
<i class="fi-minus"></i>
<div class="checkboxFive">
<input type="checkbox" name="massTypeId" class="massTypeTreeId" id="t_8587509198220874655a1s8" value="8587509198220874655a1s8">
<label for="t_8587509198220874655a1s8"></label>
</div>
<span class="text">Fyllgrus</span>
<ul class="child">
<li id="8587496924061602638qkdo">
<div class="checkboxFive">
<input type="checkbox" name="massTypeId" class="massTypeTreeId" id="t_8587496924061602638qkdo" value="8587496924061602638qkdo">
<label for="t_8587496924061602638qkdo"></label>
</div>
<span class="text">sub sub</span>
</li>
</ul>
</li>
<li id="8587509198127281697em9f">
<div class="checkboxFive">
<input type="checkbox" name="massTypeId" class="massTypeTreeId" id="t_8587509198127281697em9f" value="8587509198127281697em9f">
<label for="t_8587509198127281697em9f"></label>
</div>
<span class="text">Siltholdig</span>
</li>
</ul>
</li>
<li id="8587509197183114344b5l4" class="has-children">
<i class="fi-plus"></i>
<div class="checkboxFive">
<input type="checkbox" name="massTypeId" class="massTypeTreeId" id="t_8587509197183114344b5l4" value="8587509197183114344b5l4">
<label for="t_8587509197183114344b5l4"></label>
</div>
<span class="text">Leire</span>
<ul class="child">
<li id="85875091985832885997g4j">
<div class="checkboxFive">
<input type="checkbox" name="massTypeId" class="massTypeTreeId" id="t_85875091985832885997g4j" value="85875091985832885997g4j">
<label for="t_85875091985832885997g4j"></label>
</div>
<span class="text">Bløt</span>
</li>
<li id="858750919842507621898j6">
<div class="checkboxFive">
<input type="checkbox" name="massTypeId" class="massTypeTreeId" id="t_858750919842507621898j6" value="858750919842507621898j6">
<label for="t_858750919842507621898j6"></label>
</div>
<span class="text">Tørr</span>
</li>
</ul>
</li>
我想要实现的是,无论何时选择子节点,它都会一直运行到根节点并选择层次结构中的所有父节点。像这样:
因此,当我在图像中选择子子时,父母也被选中。我有一个类设计父检查复选框。我想用类'checkboxFive'将该类添加到所有父div。在jquery中有一种简单的方法可以做到这一点,或者我必须使用递归来添加它吗?
答案 0 :(得分:2)
虽然其他人已经提到JQuery.parents()
,但值得注意的是parents()
可以将选择器作为参数。据我所知,您希望将一些特殊类(我将在此答案中称为parentCheckbox
)应用于checkboxFive
类的任何父复选框。你可以这样做:
$(<JQuery selector for whatever you want to set this for>).change(function() {
$(this).parents(".checkboxFive").addClass("parentCheckbox");
});
您需要做的就是找出a)您想要将onchange函数应用于:
$("input[type=checkbox]")
或
$(".tree input[type=checkbox"]")
如果您想确保它仅应用于ul
类tree
内的复选框。
您还可以更加具体地了解parents()
选择器并执行parents(".tree .checkboxFive").addClass...
之类的操作,以确保检查树外的任何内容。
答案 1 :(得分:1)
为您创建了一个示例。您可以轻松理解这一点,并根据您的情况实施相同的操作。这会使每个<div>
内的所有文字的颜色都变为红色。
<div>
GrandParent
<div>
Parent
<div id="test">
Child
</div>
</div>
</div>
<script>
jQuery("#test").parents("div").css("color" , "red");
</script>