2013-08-30 2 views
1

여러 테이블을 사용하고 테이블 행을 번갈아 가며 음영 처리하고 싶습니다. 그렇게하는 일반적인 방법이 파이어 폭스, 크롬, 사파리에서 작동IE에서 n 번째 자식 선택기 대체

.t tbody > tr:nth-child(odd) > td:nth-child(1) { 
     background-color:#f0f0f0; 
    } 

이지만, IE는 nth-child() 의사 클래스를 지원하지 않습니다. 클래스를 사용하여 수동으로 각 행에 태그를 지정하지 않은 경우이를 수행 할 수있는 대체 브라우저 방식이 있습니까? 필자는 임베디드 시스템의 공간을 소비하기 때문에이 문제를 피하고자합니다.

참고 :이 페이지는 WiFi 액세스 포인트로 작동하는 내장 시스템에서 제공됩니다. 이는 클라이언트가 인터넷이 아닌 임베디드 시스템에 연결된다는 것을 의미합니다. JS 라이브러리 없음

편집 : IE 9 nth-child()을 지원합니다,하지만 난 IE 7, 8 지원할 수 있어야합니다뿐만 아니라

+1

어떤 IE 버전을 지원해야합니까? IE는 버전 9부터': nth-child()'를 이해합니다. – BoltClock

+0

IE 7, 8, 9를 지원해야합니다. – waldol1

+0

JS 라이브러리를 사용할 수 없다면 클래스에 요소를 추가하면됩니다 당신은 당신이 페이지를 쓸 때 스타일을 원한다. 하지만 메인 html 페이지와 동일한 호스트에서 제공되는 라이브러리를 사용할 수없는 이유는 확실하지 않습니다. 페이지 자체와 동일하게 액세스 할 수 있어야합니다. 문제는 파일 크기일까요? IE9.js는 40k로 로고 그래픽보다 작습니다. gzipped 경우 작아집니다. 오래된 Internet Explorer 사용자 만 다운로드 할 수 있습니다. – Spudley

답변

1

페이지 끝 부분에이 스크립트를 배치하십시오. 첫 번째 tbody가 발견 된 것으로 가정하지만,이 값을 오프셋 (또는 여러 tbodys를 처리하기 위해)으로 수정하거나 특정 ID로 대상을 지정하여 작업을 더 쉽게 만들 수 있습니다.

<script> 
(function(){ 
    var 
    tby = document.getElementsByTagName('tbody')[0], 
    trs = tby.getElementsByTagName('tr'), 
    i, l = trs.length 
    ; 
    for (i=0; i<l; i++) { 
    if ((i + 1) & 1) { 
     trs[i] 
     .getElementsByTagName('td')[0] 
      .style 
      .backgroundColor = '#f0f0f0' 
     ; 
    } 
    } 
})(); 
</script> 

위의 내용은 바이트가 걱정되는 경우 축소 될 수 있습니다.

+0

우리는 동시에 그것을 알아 낸 것 같습니다. – waldol1

+0

@ waldol1, heh yeah :) – Pebbl

3

없음; 없습니다 불행히도 :nth-child(odd)을 대체 할 클래스를 사용하여 각 행에 수동으로 태그를 지정해야합니다. :nth-child(1):first-child으로 대체 할 수 있습니다. 그러나 IE7 또는 IE8과 매우 오래된 버전은 지원하지 않는다고 가정합니다. 여기

+0

라이브러리없이 js에서 수행 할 수 있습니까? – waldol1

1

는 CSS는 당신이 필요로한다 : 나는 확실히 사람을 향상시킬 수있어

function go() { 
    tables = document.getElementsByTag('table'); 
    var i, len = tables.length; 
    for(i = 0; i < len; i++) { 
    var tbody = tables[i].children[0] // assumes <tbody> is first child 
    var k, num_trs = tbody.rows.length; 
    for(k = 0; k < num_trs; k+=2) { // k += 2 for alternate shading 
     var tr = tbody.rows[k]; 
     tr.classList.add('shaded'); 
    } 
    } 
} 

: 여기

.shaded { 
    background-color: #F0F0F0; 
} 

테이블 구조에 대한 몇 가지 가정에 대해,이 작업을 수행하는 JS 기능입니다 지능적으로 tbody를 선택하거나 쉐이딩 패턴을 결정하는 매개 변수를 취합니다.

+1

나는 내 대답을 계속하겠다. 내 코드는 당신이 여기서 만들고있는 가정들을 만들 수 없었기 때문에, 훨씬 복잡하게되었다.예를 들어, 클래스별로 요소를 가져 오는 것은 IE8 이하의 모든 부분에서 고통스런 일인데, 단순히'tbody' 요소를 직접 잡아 두는 것만으로 간단하게 생각할 수 있습니다. – BoltClock

+0

흠, tbody 요소를 직접 잡아 테이블을 통과하지 않으면 덜 복잡합니다. 좋은 생각. – waldol1

+0

네가't' 클래스가없는 다른 테이블을 가지고 있다고 가정하고, 다른 테이블 아래에 행의 스타일을 지정하고 싶지 않았다. – BoltClock