我正试图找出一种方法来使用CSS选择器来隔离div
的特定子项。
我希望选择器仅适用于嵌套在input
内而非#section1
内的#section2
。
<div class="section" id="section1">
<div class="section" id="section2">
<input type="text">
</div>
<input type="text">
</div>
这是一个简化的例子,但这里有一些值得注意的事情:
div
是唯一可识别的,但有一个共同的类input
在各个方面完全相同(除了它们的位置),但每个div.section
只有唯一的input
s,它们不会嵌套在其他div.section
中div.section
1}}Šinput
:nth-child(n)
的位置可能会发生变化,这意味着它可能会在嵌套div之前或之后出现相同的输入(排除:nth-of-type(n)
或{{1} })但它仍然在级别div
一堆乱七八糟如果它是相关的,我正在使用WebdriverIO与页面进行交互,但它除了CSS选择器之外不包含很多其他内容来查找DOM上的元素(除了链接文本,这不是很这里很有用。)
如果我能更多地澄清情景,请告诉我。我找不到任何与此相似的问题(大多数是造型,可以通过覆盖嵌套的样式来解决)但如果我错过了某些内容,请告诉我。
编辑:一个更准确的例子(复杂的混乱和额外的输入)看起来更像是......
<div class="section" id="section1">
<div>
<div class="section" id="section2">
<input type="text" class="input1">
<input type="text">
</div>
</div>
<div>
<div>
<div class="section" id="section3">
<input type="text">
...
</div>
</div>
</div>
<div>
<input type="text" class="input1">
...
</div>
</div>
<div class="section" id="section4">
...
</div>
在此示例中,input.input1
都是#seciont1
的子项,但我希望它们与最近的父div.section
相关联。因此,第一个出现的与#section2
相关联,第二个与#section1
相关联。
因此,必然会有嵌套或包围任何部分的无关代码,但它对于重要的东西是可区分的。我只是不能使用子选择器>
,因为它不是直接的孩子。
还可以使用更多输入以任何方式嵌套更多div.section
个,但每个input
中只有唯一div.section
个未嵌套的div.section
不同的input
。
我也没有用它来造型,所以我不能用第二个选择器覆盖。我需要一个选择器来唯一地标识正确的div.section
,并且它与其最近的父&
。
答案 0 :(得分:0)
#section1 > input { }
>
是子选择器。它只选择那些元素的直接子元素。它不会进一步向树下移动。
答案 1 :(得分:0)
你可以做这样的事情
.section > #section1 input {
border: 2px solid red;
}
.section > #section1 > #section2 input {
border: 2px solid green;
}
这种方式有一支笔 https://codepen.io/KamilNaja/pen/JJKKZx 第二种方式是使用&#34;不是&#34; pseudoselector。
答案 2 :(得分:0)
编辑:我不确定您是否会使用一个魔术选择器来覆盖所有情况。 (但JavaScript可能会这样做。)你真正要做的是根据其父母之一(或祖父母,或曾祖父母,或其他)选择input
。但是这个在CSS 中是不可能的。
请参阅:Is there a CSS parent selector?
但是,您可以通过一些聪明的选择器组合 获得您想要的东西。您可以混合搭配的有用选项:
#
ID选择器>
直接子选择器:nth-child
/ :nth-of-type
选择器:not
选择器+
兄弟选择器。以下是一些示例案例,其中不是父级input
div的.section
是从具有特定ID的父级中挑选出来的,该ID也具有.section
类。
#section1 div + div + div > input {
border: 2px solid red;
}
#section4 div + div:not(:last-child) input {
border: 2px solid blue;
}
#section7 > div:first-child input {
border: 2px solid gold;
}
/* appearance only */
#section4, #section7 {
margin-top: 10xp;
border-top: 2px solid gray;
}
&#13;
<div class="section" id="section1">
<div>
<div class="section" id="section2">
<input type="text" class="input1">
<input type="text">
</div>
</div>
<div>
<div>
<div class="section" id="section3">
<input type="text">
<div>more stuff...</div>
</div>
</div>
</div>
<div>
<input type="text" class="input1">
<div>more stuff...</div>
</div>
</div>
<div class="section" id="section4">
<div>
<div class="section" id="section5">
<input type="text" class="input1">
<input type="text">
</div>
</div>
<div>
<input type="text" class="input1">
<div>more stuff...</div>
</div>
<div>
<div>
<div class="section" id="section6">
<input type="text">
<div>more stuff...</div>
</div>
</div>
</div>
</div>
<div class="section" id="section7">
<div>
<input type="text" class="input1">
<div>more stuff...</div>
</div>
<div>
<div class="section" id="section8">
<input type="text" class="input1">
<input type="text">
</div>
</div>
<div>
<div>
<div class="section" id="section9">
<input type="text">
<div>more stuff...</div>
</div>
</div>
</div>
</div>
&#13;
这里明显的缺点是你必须为每个输入做一个规则,或至少你需要匹配的每个模式。这对你来说多么烦人,最终将取决于你必须涵盖的模式数量。但它可能有这样或那样的方式。
答案 3 :(得分:0)
你提出问题的方式使它成为一个不可能的问题。正如您从其他答案中已经知道的那样,awk '{sub(/123\\/,"")}1' file
Col1 Col2
abc abc
abcd abcd
是直接子选择器。
由于嵌套在>
中的元素也嵌套在#section2
中,因此选择器会捕获两者,除非您指定使用直接子选择器。
如果你不能做出任何其他假设,我认为没有出路。您可以在CSS选择器链的任何级别使用#section1
选择器,如果您可以找到一些排序,将您感兴趣的部分放在相对于嵌套的特定顺序中。