从选定列表中删除元素而不是从dom中删除

时间:2016-03-03 16:54:29

标签: javascript jquery

我需要在jQuery中进行复杂的选择 它应该如下:

var ctrls = $('.ctrl').not('.ctrl:disabled,.ctrl:parent:hidden');
ctrls.parents('.InsideContainerControl:hidden').remove();
显然,第二行实际上是从dom中删除了元素 而我正在寻找的是一种从选择列表中删除它的方法

1 个答案:

答案 0 :(得分:2)

这样的事情应该有效,你首先过滤掉父母,然后过滤掉孩子:

$('.InsideContainerControl')                   // get all parents
.not('.InsideContainerControl:hidden')         // remove hidden ones
    .find('.ctrl')                             // get all children from the remaining
    .not('.ctrl:disabled,.ctrl:parent:hidden') // remove disabled ones

注意这一点,应该忽略1,2(父隐藏)和4(禁用):

var sel = 
    $('.InsideContainerControl')                   // get all parents
    .not('.InsideContainerControl:hidden')         // remove hidden ones
        .find('.ctrl')                             // get all children from the remaining
        .not('.ctrl:disabled,.ctrl:parent:hidden');// remove disabled ones

alert(sel.text());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="InsideContainerControl" style="display: none">
  <button class="ctrl">1</button>
  <button class="ctrl" disabled>2</button>
</div>
<div class="InsideContainerControl">
  <button class="ctrl">3</button>
  <button class="ctrl" disabled>4</button>
</div>