Javascript jQuery alter元素如果有类

Javascript jQuery alter元素如果有类,javascript,jquery,html,jquery-selectors,this,Javascript,Jquery,Html,Jquery Selectors,This,我有一个简单但麻烦的问题。我有一个字段和一些带有复选框的组。当字段的值更改时,我想检查字段,如果它们隐藏了类,那么我想取消选中它们的所有复选框 <select id="myselect"> <option value="1">some value 1</option> <option value="2">some value 2</option> </select> <div id="skills-conta

我有一个简单但麻烦的问题。我有一个
字段和一些带有
复选框的
组。当
字段的值更改时,我想检查
字段,如果它们隐藏了类
,那么我想取消选中它们的所有复选框

<select id="myselect">
  <option value="1">some value 1</option>
  <option value="2">some value 2</option>
</select>

<div id="skills-container-1" class="skills-container hidden"> 
  <fieldset id="P2_SKILLS_1" class="checkbox_group">
    <input type="checkbox" name="p_v16" value="2033"><br>
    <input type="checkbox" name="p_v17" value="2034"><br>
    <input type="checkbox" name="p_v18" value="2035"><br>
  </fieldset>
</div>
<div id="skills-container-2" class="skills-container hidden"> 
  <fieldset id="P2_SKILLS_2" class="checkbox_group">
    <input type="checkbox" name="p_v19" value="2036"><br>
    <input type="checkbox" name="p_v20" value="2037"><br>
    <input type="checkbox" name="p_v21" value="2038"><br>
  </fieldset>
</div>
很明显,它不起作用。我不确定我是否正确使用了
项。可能
这个
指的是
元素,而不是隐藏了类
。 有什么办法解决这个问题吗?谢谢

编辑-使用阿切尔的高级答案

您需要分别检查每个“技能容器”:

$('.skills-container').each(function() {
  if ($(this).hasClass('hidden'))
    $(this).find('input').prop('checked', false);
});

当您使用API(如
.hasClass()
)提问时,您只能得到第一个匹配元素的答案。通过使用
.each()
进行迭代,您可以分别对每一个执行操作。

一个简单的单行程序就可以做到这一点

$("div.skills-container.hidden input:checkbox").prop("checked", false);
它在div中查找类
.skills container
.hidden
的所有复选框,并将属性
checked
设置为false

只需将其放在您的更改事件中:)

编辑: 正如Alnitak所建议的,您可以通过只选择当前选中的复选框而不是将其设置为“未选中”来进一步缩小选择范围。这可能会影响性能,也可能不会影响性能,但如果您有很多复选框可能会受到影响,那么一定值得检查

$("div.skills-container.hidden input:checkbox:checked").prop("checked", false);

找到所有选中的
项并将其取消选中

 $('.skills-container.hidden').find(':checked').prop('checked',false):

为什么要分开@阿切尔的回答在我看来很好。@Alnitak是的,它更好!:)当然,您是正确的,
.hasClass
一次只能处理一个元素,但是当选择器可以为您完成所有工作时,为什么还要麻烦使用
.hasClass
。谢谢您的快速回复@阿切尔的anwser很适合我:)@eyetea这不是我的答案——我只是commenting@eyetea请注意此答案(正确)使用了
.prop('checked',false)
而不是
。删除ttr
以更新复选框。感谢您的光速提示!很好!您可以考虑向选择器添加<代码>:检查< /代码>限定符。@ AlnAlk好点。如果我们不谈论很多复选框,那么它可能不会有任何区别,我(个人)宁愿选择一个较短的选择器,但需要进行性能测试,以确定是否可以更快地在所有复选框上设置属性,或者在所有复选框上检查属性,然后在某些复选框上设置属性。我内心的强迫症在不久的将来看到了jsperf;)复选框不超过200个有时取消选中所有内容要比让jQuery更努力地查找所需元素更容易。Archer答案中的单一选择器在现代浏览器上比使用选择器后跟
.find()
更有效。jQuery伪选择器是个例外,最好将标准CSS选择器分离出来。
 $('.skills-container.hidden').find(':checked').prop('checked',false):