【问题标题】:Select everything in the parent except the child选择父项中除子项之外的所有内容
【发布时间】:2012-08-05 03:46:27
【问题描述】:

我正在编写一个主干应用程序,并使用内置的事件处理,它使用 jquery 选择器。

我想编写一个选择器,它将选择除下面的.delete 之外的所有内容,然后专门为.delete 选择一个选择器(这要简单得多。)

基本上,我想选择父项中的所有内容,除了这个特定的孩子。

我试过li:not(.delete),但没有奏效。有什么想法吗?

<li class="">
  <a href="#">
    <i class="icon-book"></i>
    <span class="name">@randallb</span>
    <i class="delete icon-remove-sign pull-right"></i>
  </a>
</li>

【问题讨论】:

  • a 中嵌套了 3 个元素,li 中嵌套了 3 个元素。您实际上需要选择哪个?
  • @fguillen:jQuery 选择器与 CSS 选择器不同。对于看似用 JS 代码回答 CSS 问题的答案,我正要投反对票,但注意到原来的问题被标记为 [jquery]。 jQuery 确实使用选择器引擎来搜索 DOM 元素,因此 IMO 原始标签是合适的。为此,我将标签改回来了。

标签: jquery jquery-selectors


【解决方案1】:
li :not(.delete)

需要空格来指定后代,没有它notli 进行操作意味着选择没有delete 类的li

【讨论】:

  • 我在 jsFiddle 中快速尝试了一下,但似乎没有用。我做错了吗? jsfiddle.net/ck2Mt
  • 不仅仅是颜色,所有规则都是继承的,这就是级联的工作方式。但我相信原始海报不希望选择锚元素(包含其他三个)。在第二次阅读时,我相信这符合问题的 literal 要求,但我不确定这是否是他们真正需要的。我想不出一个真实的用例,他们也希望选择锚。
  • @GregPettit 许多属性规则不是继承的,还有覆盖其他规则而不是继承的级联处理。
  • 我能想到的唯一不被继承的属性规则是那些不适合节点类型或上下文不允许的属性规则(即定位)。也许“全部”是夸大其词。至于级联,继承和覆盖简直是一枚硬币的两面。所有“覆盖”的意思是,本来应该从另一个规则中获取的属性改为从(继承自)这个更具体的规则中获取。继承与覆盖只是语义。以一种或另一种方式看待它只是哪种视角最适合您的问题。
  • @Greg Pettit:规范中规定了默认情况下是否继承属性。 Musa 是对的:级联和继承是两个不同的概念;虽然两者都参与计算给定的样式,但它们并不相互依赖。无论哪种方式,我们都可能在这里接近迂腐的路线......
【解决方案2】:

试试这个:

$('li > a *:not(.delete)')

【讨论】:

  • 这实际上是我最终使用的,因为 Backbone 已经假设你的范围是 li。
【解决方案3】:
$('li').children().find('*:not(.delete)').css('color', 'red');

【讨论】:

    【解决方案4】:

    如果这是您正在寻找的。​​p>

    // allChildrenArray will hold all the children of li except .delete
       var allChildrenArray = [];
        function getSelectedChildren(parentContainer, rejectedClass){
            parentContainer.children().each(function(){
                if(!$(this).hasClass(rejectedClass)){
                    allChildrenArray.push(this);
                }
                getSelectedChildren($(this), rejectedClass);
            });
        }
        getSelectedChildren($('li'), 'delete');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-11
      • 2020-09-01
      • 2015-05-01
      • 2017-03-28
      • 1970-01-01
      • 2016-11-03
      • 1970-01-01
      • 2016-02-12
      相关资源
      最近更新 更多