getElementsByTagNameNS() 는 getElementsByTagName()의 사촌 쯤 되는데,
NS 가 붙는 이유는 NameSpace를 사용하기 때문이다.
getElementsByTagName('TagName');
처럼 쓰지만.
getElementsByTagNameNS('NameSpace','TagName');
처럼 쓴다.
('NameSpace','TagName' 문자열에 *를 대신 사용하면 모든것을 지칭하게된다.)
네임 스페이스를 XML등에 사용할 때 표시법
위 소스는 RSS에서 사용되는 방법으로
aaa 라는 네임스페이스를 정의하는데
네임 스페이스를 포함한 태그
위 태그는 aaa라는 네임스페이스에 포함된 bbb라는 태그의 사용을 나태낸 것이다.
보통의 HTML에서는 저런 형식은 사용되지 않지만, XML(RSS는 XML을 이용한 것)에서는 꽤 자주사용되는 표현이다.
네임스페이스가 포함된 객체를 tagName로 가져오기
var bbb = document.getElementsByTagNameNS('http://test.com/aaa/','bbb');
이렇게 URI를 내타내서 사용하지만
var aaa = 'http://test.com/aaa/';
var bbb = document.getElementsByTagNameNS(aaa,'bbb');
로 사용하는 방법을 추천
여기서 문제가 발생하는데, IE에서는 getElementsByTagNameNS()가 지원되지 않는다.
(FF에서는 지원됨)
IE에서는 네임스페이스사용을 무시하고
var bbb = document.getElementsByTagName('aaa:bbb');
로 사용하면 된다.
여기서 또 문제점이 발생하는데, FF에서는 저런 방식으로 안된다.
FF에서는 네임스페이스를 지원하기 때문에 aaa는 태그가 아니라 네임스페이스로 처리되야한다.
그러므로
var bbb = document.getElementsByTagName('bbb');
모든 bbb태그를 가져오는 방식으로 쓰면 된다.
이건
var bbb = document.getElementsByTagNameNS('*','bbb');
와 같은 결과를 가져올 것이다.
호환성을 생각한 방법
(xmlDoc 은 AJAX로 가져온 XML의 Document이다. 그냥 HTML에서도의 Document와 성질이 같다.)
if(xmlDoc.getElementsByTagNameNS){ //getElementsByTagNameNS 를 지원할 때
var location = xmlDoc.getElementsByTagNameNS(yweather,'location');
}else if(xmlDoc.getElementsByTagName('yweather:location')){
//IE용 : 네임스페이스를 포함해서 태그를 검색할 수 있을 때
var location = xmlDoc.getElementsByTagName('yweather:location');
}else{ //그외
var location = xmlDoc.getElementsByTagName('location');
}
'인터넷관련' 카테고리의 다른 글
ActiveX 무조건 다운로드하기 (0) | 2008.02.16 |
---|---|
PHP 파일 타입 알아보기 mime_content_type() (0) | 2008.02.16 |
인터넷 익스플로러 다운로드 제한 수 변경하는 방법 (0) | 2008.02.16 |
입력창에 바로 한글 입력하기 ime-mode (0) | 2008.02.16 |
금지태그 변환 (0) | 2008.02.16 |
select에 option동적으로 추가하기 (0) | 2008.02.16 |
JAVASCRIPT로 레이어(기타등등) 이동(드래그)하기, FF가능버전 (0) | 2008.02.16 |
키입력과 오른쪽 마우스 등 막기 (0) | 2008.02.16 |