Javascript Cookbook

무순서 목록을 줄무늬로 만들기

문제

무순서 목록의 모양을 바꾸어 줄무늬로 만들고 싶다.

해결

선택자 API를 사용해서 목록의 모든 항목을 가져온 뒤 배경색을 바뀌면 된다.

var lis = document.querySelectorAll('li:nth-child(2n+1)');
for(var i=0; i<lis.length; i++){
    lis[i].setAttribute("style", "background-color:#ffeeee");
}

다음과 같이 작성할 수도 있다.

var lis = document.querySelectorAll('li:nth-child(odd)');
for(var i=0; i<lis.length; i++){
    lis[i].setAttribute("style", "background-color:#ffeeee");
}

또는 목록 부모 요소에 접근한 뒤 자식 노드를 탐색하며 홀수 요소마다 배경색을 바꾸는 방법도 있다. 홀수 요소는 나눗셈 연산을 통해 구할 수 있다.

var parentElement = document.getElementById("thelist");
var lis = parentElement.getElementsByTagName("li");
for(var i=0; i<lis.length; i++){
    if(i%2 == 0){
        lis[i].setAttribute("style", "background-color:#eeffee");

     // IE7
     // lis[i].style.backgroundColor = "#eeffee";
    }
}

설명

:nth-child() 가상 클래스는 대부분의 브라우저에서 지원하지만 IE8은 지원하지 않는다. 이런 경우 해결의 세번째 방식을 사용하면 된다.

해결에서는 나머지 연산을 사용하여 홀수 요소에 접근했는데, 만약 짝수 요소에 접근하려면 다음과 같이 작성하면 된다.

if((i+1)%2){
    ...
}

스타일 속성을 setAttribute 메서드와 함께 사용했는데, 이는 IE7에서는 작동하지 않는다. IE7을 위한 우회 방법은 다음과 같다.

// IE7
lis[i].style.backgroundColor = "#eeffee";

예제보기 http://embed.plnkr.co/4UorTvtCFH6yEHdWVjm7/preview