Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 如何选择没有特定类的所有其他元素?_Html_Css_Css Selectors - Fatal编程技术网

Html 如何选择没有特定类的所有其他元素?

Html 如何选择没有特定类的所有其他元素?,html,css,css-selectors,Html,Css,Css Selectors,我有一个的列表。每个都有类斑马。到目前为止,我一直使用以下方法对列表进行条带化: .zebra:nth-child(2n) { /* colors */ } 现在我正在实现一个过滤特性,这样一些将有一个类隐藏。我尝试将css更新为 .zebra:not(.hidden):nth-child(2n) { /* colors */ } 但这没有效果。我错过了什么?如何组合这些选择器,以便在:第n个子项(2n)中只考虑显示的.zebras 下面是我描述的一个例子 更新: 有数目未知的.hidde

我有一个
的列表。每个
都有类
斑马
。到目前为止,我一直使用以下方法对列表进行条带化:

.zebra:nth-child(2n) { /* colors */ }
现在我正在实现一个过滤特性,这样一些
将有一个类
隐藏。我尝试将css更新为

.zebra:not(.hidden):nth-child(2n) { /* colors */ }
但这没有效果。我错过了什么?如何组合这些选择器,以便在
:第n个子项(2n)
中只考虑显示的
.zebra
s

下面是我描述的一个例子

更新

  • 有数目未知的
    .hidden
    元素,以及总数未知的元素。(列表是数据驱动的,不是静态的)
我真的不想做以下任何事情:

  • 每次触摸filter控件时运行javascript,只需为显示的列表项重新着色即可
  • 当元素隐藏时,将其完全移除。这使得重新添加它变得非常重要(afaict)

  • 如果您不介意深入研究jquery

    $('#yourHiddenElement').remove();
    
    将删除它,以便您的css阴影替换


    我建议使用它,而不是将类“hidden”应用于要隐藏的元素。

    如果您不介意深入研究jquery的话

    $('#yourHiddenElement').remove();
    
    将删除它,以便您的css阴影替换


    我建议使用此选项,而不是将类“hidden”应用于要隐藏的元素。

    如果您知道将有数量有限的
    。hidden
    项,您可以执行以下操作:

    .zebra2:nth-child(2n) {
        background: lightgrey;
    }
    
    .zebra2.hidden ~ .zebra2:nth-child(2n) {
        background: inherit;
    }
    .zebra2.hidden ~ .zebra2:nth-child(2n+1) {
        background: lightgrey;
    }
    
    .zebra2.hidden ~ .zebra2.hidden ~ .zebra2:nth-child(2n) {
        background: lightgrey;
    }
    .zebra2.hidden ~ .zebra2.hidden ~ .zebra2:nth-child(2n+1) {
        background: inherit;
    }
    
    等等。如果有两个以上的隐藏项,则此特定项将中断。

    如果您知道将有数量有限的
    .hidden
    项,您可以执行以下操作:

    .zebra2:nth-child(2n) {
        background: lightgrey;
    }
    
    .zebra2.hidden ~ .zebra2:nth-child(2n) {
        background: inherit;
    }
    .zebra2.hidden ~ .zebra2:nth-child(2n+1) {
        background: lightgrey;
    }
    
    .zebra2.hidden ~ .zebra2.hidden ~ .zebra2:nth-child(2n) {
        background: lightgrey;
    }
    .zebra2.hidden ~ .zebra2.hidden ~ .zebra2:nth-child(2n+1) {
        background: inherit;
    }
    
    等等。如果有两个以上的隐藏项,则此特定项将中断。

    您可以使用不同标记的元素替换该元素,而不是将其作为删除。我们可以使用
    详细信息
    ,例如:

    var placemarker = document.createElement("details");
    node.parentNode.replaceChild(placemarker, node);
    placemarker.appendChild(node);
    
    然后,使用类型为
    的第n个子项,而不是第n个子项

    details { display:none; }
    div.zebra:nth-of-type(2n) { /* colors */ }
    
    然后可以使用以下方法取消隐藏元素:

    placemarker.parentNode.replaceChild(placemarker.firstChild);
    

    请参见。

    您可以使用不同标记的元素替换该元素,而不是将其作为删除。我们可以使用
    详细信息
    ,例如:

    var placemarker = document.createElement("details");
    node.parentNode.replaceChild(placemarker, node);
    placemarker.appendChild(node);
    
    然后,使用类型为的第n个子项,而不是第n个子项

    details { display:none; }
    div.zebra:nth-of-type(2n) { /* colors */ }
    
    然后可以使用以下方法取消隐藏元素:

    placemarker.parentNode.replaceChild(placemarker.firstChild);
    
    请参阅。

    一种可能的解决方案:

    使用jQuery将
    .hidden
    元素的类型更改为,例如,
  • 。使用类型的
    :n而不是
    :n子项

    一种可能的解决方案:

    使用jQuery将
    .hidden
    元素的类型更改为,例如,
  • 。使用类型的
    :n而不是
    :n子项



    你不能那样做。这不是
    :not()
    :nth-child()
    伪类的工作方式。您可以将其反转,删除
    :not
    部分,并仅为
    声明一些规则。隐藏
    以覆盖这些规则。在我的iPhone上,它看起来非常完美。所以这可能是特定于浏览器的。你在用哪个浏览器?Facepalm我看错了。@BoltClock我想我现在明白了…在尝试了另一种使用反向分类的解决方案后(
    。在大多数元素上显示
    ,而在少数元素上隐藏
    )。
    :n子项
    不是我想要的,你不能这样做。这不是
    :not()
    :nth-child()
    伪类的工作方式。您可以将其反转,删除
    :not
    部分,并仅为
    声明一些规则。隐藏
    以覆盖这些规则。在我的iPhone上,它看起来非常完美。所以这可能是特定于浏览器的。你在使用哪个浏览器?Facepalm我看错了。@BoltClock我想我现在明白了…在尝试另一种使用反向分类的解决方案后(
    。在大多数元素上显示
    ,而在少数元素上隐藏
    )。
    :n子项
    不是我想要的。你可以使用
    节点。父节点。移除子项(节点)没有jQuery也能达到同样的效果:)我可以这样做,但是重新添加元素将是非常重要的。不幸的是,我认为这是我唯一的希望…不过我会先考虑一下。我想不出其他任何东西。。对不起,伙计!您可以使用
    node.parentNode.removeChild(节点)没有jQuery也能达到同样的效果:)我可以这样做,但是重新添加元素将是非常重要的。不幸的是,我认为这是我唯一的希望…不过我会先考虑一下。我想不出其他任何东西。。对不起,伙计!是的,我知道这很难看有趣的解决方案,但不幸的是列表是数据驱动的,因此有任意数量的
    .hidden
    元素。是的,我知道这很难看。:)有趣的解决方案,但不幸的是列表是数据驱动的,因此有任意数量的
    .hidden
    元素比我的同一解决方案实现更健壮比我的同一解决方案实现更健壮