jQuery选择器,除父元素为div之外的所有元素

时间:2019-01-10 16:53:50

标签: javascript jquery

以下是我的HTML:

<div id="formdata">    
  <div id="to_select">
    <input type='hidden' name='to_be_selected' value='a' />
    <input type='hidden' name='also_to_be_selected' value='a' />
  </div>
  <input type='hidden' name='to_be_selected_too' value='a' />
  <div id="not_to_select">
    <input type='hidden' name='not_to_select' value='not selected'/>
  </div>    
</div>

如何仅选择不在div#not_to_select中的元素

以下是我尝试过的内容:

$("#formdata div:not(#not_to_select)").find('input')

$("#formdata").not("div#not_to_select").find('input,select,textarea')

$("#formdata").find('input,select,textarea').filter(function(){
      return $(this).parent().is(":not(#not_to_select)");
})

2 个答案:

答案 0 :(得分:3)

要实现此目的,您可以使用filter()排除inputs的后代#not_to_select

var $inputs = $('#formdata input').filter(function() {
  return $(this).closest('#not_to_select').length == 0;
});

$inputs.addClass('foo');
.foo { border: 1px solid #C00; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="formdata">
  <div id="to_select">
    <input type="text" name="to_be_selected" value="a" />
    <input type="text" name="also_to_be_selected" value="a" />
  </div>
  <input type="text" name="to_be_selected_too" value="a" />
  <div id="not_to_select">
    <input type="text" name="not_to_select" value="not selected" />
  </div>
</div>

或者,您可以使用:not()排除它们:

var $inputs = $('#formdata input:not(#not_to_select input)');

$inputs.addClass('foo');
.foo { border: 1px solid #C00; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="formdata">
  <div id="to_select">
    <input type="text" name="to_be_selected" value="a" />
    <input type="text" name="also_to_be_selected" value="a" />
  </div>
  <input type="text" name="to_be_selected_too" value="a" />
  <div id="not_to_select">
    <input type="text" name="not_to_select" value="not selected" />
  </div>
</div>

答案 1 :(得分:0)

我建议以下内容:

$(function() {
  var $inputs = $("#formdata input:not([name='not_to_select']");
  $inputs.each(function(i, el) {
    console.log(i, $(el).attr("name"));
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="formdata">
  <div id="to_select">
    <input type='hidden' name='to_be_selected' value='a' />
    <input type='hidden' name='also_to_be_selected' value='a' />
    <input type='hidden' name='not_to_select' value='not selected' />
  </div>
  <input type='hidden' name='to_be_selected_too' value='a' />
  <div id="not_to_select">
    <input type='hidden' name='not_to_select' value='not selected' />
  </div>
</div>

由于您要查找具有name属性的商品,因此可以使用:not来选择要排除的商品。

我认为我建议使用class属性。可以更轻松地选择元素组。

希望有帮助。