2009-04-08 3 views
1

저는 IE Mobile에서 작동해야하는 모바일 웹 앱을 만들고 있습니다. IE 모바일에 'className'속성 (IE4 엔진 ...)을 지원하지 않는 JavaScript 오류가 발생했습니다. 최소한의 코드 변경으로 모든 브라우저에서 작동하는 대안을 찾으려고합니다. 이미 'className'을 사용하는 몇 가지 라이브러리가 있습니다.IE 모바일 용 JavaScript의 'className'대신 사용 하시겠습니까?

내가 생각할 수있는 가장 쉬운 방법은 className을 포함하도록 IE의 요소 프로토 타입을 수정하는 것이고, 문제는 'className'에 대한 대안이 IE에 무엇인지 모르겠다는 것입니다. 변하기 쉬운.

나는 이것을 시도했다 :

element.className = element.class; 

class 자바 스크립트의 키워드가 내 JS 압축기는 그것을 좋아하지 않으며, 어쨌든 아마 유효하지 않습니다 때문에 분명히 작동하지 않는다.

요소의 클래스를 수정해야하는 모든 곳에서 'setAttribute()'를 사용하는 것 이외에 className과 동일한 속성을 사용할 수 있습니까?

+0

"... IE4 엔진"- 아야! IE6 지원이 힘들다고 생각했습니다. – scunliffe

답변

2

setAttribute()을 사용하는 것은 피할 수 없지만 jQuery 안내서에서 한 줄을 가져 와서 선택적 매개 변수가있는 도우미 절차를 사용할 수 있습니다. 무엇 존 밀리 킨 위로 다음

var className = function (obj, value) 
{ 
    if (value !== undefined) 
    { 
     return obj.setAttribute ('class', value); 
    } 
    return obj.getAttribute ('class'); 
}; 

// Use as 
alert (className (element)); 
className (element, "foo"); 
alert (className (element)); 
1

아니요 아니요 아니요, 아니요. getAttribute() 및 setAttribute()가 붙어 있습니다.

1

, 당신은 심지어 IE의 요소 프로토 타입의 기능 부분을 만들 수 있습니다 :이 코드는 테스트되지 않은,하지만 작동한다고

Element.prototype.getClass = function() { 
    return obj.getAttribute ('class'); 
} 
Element.prototype.setClass = function(newClass) { 
    return obj.setAttribute('class', newClass); 
} 

또는 당신은 콤보 방법을 원하는 경우 John과 같은 ...

Element.prototype.className = function(newClass) { 
    if (!newClass) 
     return this.getClass(); 
    return this.setClass(newClass); 
} 
+0

P. 요소가 여러 클래스를 가질 수 있다고 가정하면, 사용자가 기존 클래스를 유지하기 위해 문자열 파싱을하지 않고도 특정 클래스를 추가/제거 할 수있을 정도로 이러한 기능을 향상시킬 수 있습니다. 나는 너에게 그 세부 사항을 맡길거야. – machineghost

관련 문제