2011-07-28 5 views
0

이전 웹 사이트에 문제가 있습니다. 그것의 모든 자바 스크립트 코드는 getElemenById 함수를 사용합니다. 그러나 사이트 마크 업 태그에는 id 속성이 없으며 대신 name 속성 만 있습니다. IE에서는 여전히 작동하지만 브라우저는 name 속성을 사용하여 요소를 반환합니다. 다른 모든 브라우저의 경우 JS에서 오류가 발생합니다. 다른 브라우저에서이 기능을 오버로드하여 웹 사이트가 다른 브라우저와 호환되도록 만드는 방법이 있습니까?JavaScript getElementById 함수 오버로드

+3

다른 브라우저에서 다르게 작동하도록 시도하고 해킹하지 말고 올바르게 작동하도록 코드를 수정하는 것이 좋습니다. 'getElementsByName' 메서드를 사용하여 이름으로 요소를 찾을 수 있습니다. 이름이 ID와 같이 고유하지 않을 것으로 예상되므로 배열을 반환합니다. –

답변

11

Java 또는 C와 같이 강력한 형식의 언어에서 사용하는 의미에서 JavaScript의 함수를 "오버로드"할 수있는 방법은 없습니다. 사실 자바 스크립트의 모든 함수는 이미 이런 식으로 오버로드되어 있습니다. 임의의 수와 유형의 인수로 모든 함수를 호출 할 수 있습니다.

그러나 할 수있는 일은 기존 버전 앞에 고유 한 프록시를 삽입하고 선호하는 모든 동작으로 프록시를 구현하는 것입니다. 예를 들면 다음과 같습니다.

+1

좋은 해결책! +1 –

+0

감사합니다. 그게 내게 최고야. –

1

getElementById은 제대로 작동하지 않을 것입니다. 검색을 수행하고이 같은 무언가를 대체하기 쉬운만큼 소리 :

// Replace 
document.getElementById("foo"); 
// With 
myGetElementById("foo", document); 

// Replace 
myElement.getElementById("foo"); 
// With 
myGetElementById("foo", myElement); 

그런 다음 수 myGetElementById 당신이 원하는대로, 기존의 IE에서 발생할 수있는 무엇을 당신이 getElementById을 무시하지 않을 경우에 대한 걱정없이.

1

getElementsByName을 시도하십시오. 이것은 이름과 관련하여 요소 컬렉션을 얻는 데 사용됩니다.

+0

감사합니다. 나는 알고있다. 그러나이 오래된 웹 사이트는 많은 일을하고있다. 방금 해결 방법을 찾지 못했습니다. –