2011-01-13 4 views
1

위해 나는 몇 가지 코드가 있습니다. IE6가 필요합니다 :실행 다른 JS는 IE6/다른 브라우저

document.getElementById("gD" + gDay + gMonth + gYear).setAttribute("className", "gDay gDayHover"); 

내가 다른 변수가 갈거야 :

var addOnClassAtt; 

중 하나 ""또는 "이름"그래서 나는 한 줄 실행하도록 설정되어

document.getElementById("gD" + gDay + gMonth + gYear).setAttribute("class" + addOnClassAtt, "gDay gDayHover"); 

사용자가 클래스가 아니라 클래스가 필요한 브라우저를 실행 중인지 어떻게 결정합니까? 브라우저 감지에서 벗어나 초기 검색 시도 유형 설정 방법을 사용하는 것이 좋지만 이것이 가능하지 않은 경우 가장 좋은 방법은 무엇입니까?

답변

3

을, 당신은 특징 검출보다는 브라우저 감지하고 더 낫다. Javascript에서 브라우저 감지보다 기능 감지가 쉽고 안정적입니다. 이 특정 인스턴스에서

, 당신은 다음과 같이 클래스를 설정하는 더 나을 것 :

document.getElementById(...).className = "gDay gDayHover"; 

이 코드는 IE6를 포함한 모든 브라우저에서 작동합니다.

이 문제가 발생한 이유는 클래스 속성이 DOM에서 className으로 표시 되었기 때문입니다.

이것은 단어 class이 JavaScript에서 예약어이기 때문에 DOM에서 DOM을 사용하면 모호한 점이있을 수 있지만 그 경우 문제를 해결할 때 다른 문제가 발생합니다.

setAttributeclass 속성을 설정할 때 신뢰할 수있는 기능이 아닙니다. 대부분의 다른 속성은 setAttribute으로 문제가되지 않지만 다른 몇몇 속성에도 문제가있을 수 있으므로 일반적으로 DOM 속성을 사용하는 것이 가장 좋습니다.

+0

감사합니다. 좋은 대답 –

+0

전혀 사실이 아닙니다 :'for'도 같은 이유로 인해 문제가됩니다. 일반적으로 항상 setAttribute 대신 DOM 요소의 속성을 사용하십시오. –

+0

@ Marcel Korpel - 고마워요. 나는 내 뜻을 분명히하고 당신의 요점을 포함시키기 위해 나의 대답의 마지막 부분을 편집했다. – Spudley

2

setAttribute을 사용하여 클래스 이름을 설정하면 IE가 이상하게 작동합니다. 대신 DOM 객체의 특성className 설정 : 대부분의 경우

document.getElementById("gD" + gDay + gMonth + gYear).className = "gDay gDayHover"; 
+0

완벽한 해결책 감사합니다! 모든 브라우저에서 작동하는 것 같습니다. –

+0

IE6는 className에 여러 클래스를 지원합니까? – kennebec

+0

@kennebec : 그래, 왜 안 되니? 그냥 이것을 테스트하고 예상대로 작동했습니다. –

관련 문제