까다로운 CSS 선택기
14912 단어 csshtmltutorialjavascript
jQuery의 대안 nextUntil()
오늘 저는 간단해 보이는 문제에 직면했습니다.
<!DOCTYPE html>
<html lang=en>
<meta charset=UTF-8>
<title>Document</title>
<h1>Sample</h1>
<h2>sample-1</h2>
<p>sample1-1
<p>sample1-2
<p>sample1-3
<h2>sample-2</h2>
<p>sample2-1
<p>sample2-2
<h2>sample-3</h2>
<p>sample3-1
<h3>Note</h3>
<p>the paragraphs under each header2
<p>need a different text color
<p>test1-1 to test1-3 -> blue
<p>test2-1 to test2-2 -> red
<p>test3-1 -> green
<p>a click on h2 must toggle display the direct
<p>following paragraphs
자, 색상부터 시작하겠습니다.
몇 가지 간단한 CSS 규칙을 작성하고
일반 형제 선택기(~)
내 친구입니다 :-):
h2:first-of-type~p {color:blue}
h2:nth-of-type(2)~p {color:red}
h2:nth-of-type(3)~p {color:green}
완료, 각 h2 아래의 색상이 정확합니다. 안타깝게도 다음 h3 아래의 단락도 녹색으로 바뀝니다.
General Sibling Selector(~)가 다음 단락을 모두 선택한다고 생각하지 않았습니다.
어떻게 해야 하나요?
h2:nth-of-type(1)
.~p
h2
뒤의 다음 단락은 제외알겠습니다. 처음에는 두 번째 이후의 모든 단락을 선택하려고 합니다
h2
.h2:nth-of-type(1)~*
p
는 제외(헤더 h2,h2,h3만 선택)~p
와 함께 다음 단락이 필요합니다.h2:nth-of-type(1)~*:not(p)~p
따라서 전체 선택기는 다음과 같습니다.
h2:nth-of-type(1)~p:not(h2:nth-of-type(1)~*:not(p)~p)
단락을 색칠하기 위한 CSS
h2:nth-of-type(1)~p:not(h2:nth-of-type(1)~*:not(p)~p){
color:blue;
}
h2:nth-of-type(2)~p:not(h2:nth-of-type(2)~*:not(p)~p){
color:red;
}
h2:nth-of-type(3)~p:not(h2:nth-of-type(3)~*:not(p)~p){
color:green;
}
문제 토글 디스플레이
h2에게 포인터 커서를 제공하고 표시를 토글하는 클래스를 생성합니다.
h2{
cursor: pointer;
user-select:none;
}
.no-display{
display:none;
}
이전 단계에서 적절한 선택자를 이미 만들었기 때문에 나머지는 더 이상 실제 문제가 아닙니다.
"use strict";
document.querySelectorAll('h2')
.forEach(( node, index ) =>
node.addEventListener ( 'click', () =>
document.querySelectorAll(
`h2:nth-of-type(${index+1})~p:not(h2:nth-of-type(${index+1})~*:not(p)~p)`
)
.forEach(node => node.classList.toggle('no-display'))
)
)
전체 코드:
<!DOCTYPE html>
<html lang=de>
<meta charset=UTF-8>
<title>Document</title>
<style>
h2:nth-of-type(1)~p:not(h2:nth-of-type(1)~*:not(p)~p){
color:blue;
}
h2:nth-of-type(2)~p:not(h2:nth-of-type(2)~*:not(p)~p){
color:red;
}
h2:nth-of-type(3)~p:not(h2:nth-of-type(3)~*:not(p)~p){
color:green;
}
h2{
cursor: pointer;
user-select:none;
}
.no-display{
display:none;
}
</style>
<h1>Sample</h1>
<h2>Test-1</h2>
<p>test1-1
<p>test1-2
<p>test1-3
<h2>Test-2</h2>
<p>test2-1
<p>test2-2
<h2>Test-3</h2>
<p>test3-1
<h3>Note</h3>
<p>the paragraphs under each header2
<p>need a different text color
<p>test1-1 to test1-3 -> blue
<p>test2-1 to test2-2 -> red
<p>test3-1 -> green
<p>a click on h2 must toggle display the direct
<p>following paragraphs
<script>
"use strict";
document.querySelectorAll('h2')
.forEach(( node, index ) =>
node.addEventListener ( 'click', () =>
document.querySelectorAll(
`h2:nth-of-type(${index+1})~p:not(h2:nth-of-type(${index+1})~*:not(p)~p)`
)
.forEach(node => node.classList.toggle('no-display'))
)
)
</script>
Reference
이 문제에 관하여(까다로운 CSS 선택기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/frankwisniewski/tricky-css-selector-ib7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)