인터넷정보

getElementsByTagNameNS 메소드란?

알 수 없는 사용자 2007. 10. 11. 17:03

getElementsByTagNameNS() 는 getElementsByTagName()의 사촌 쯤 되는데,
NS 가 붙는 이유는 NameSpace를 사용하기 때문이다.

getElementsByTagName('TagName');
처럼 쓰지만.
getElementsByTagNameNS('NameSpace','TagName');
처럼 쓴다.
('NameSpace','TagName' 문자열에 *를 대신 사용하면 모든것을 지칭하게된다.)


네임 스페이스를 XML등에 사용할 때 표시법


위 소스는 RSS에서 사용되는 방법으로
aaa 라는 네임스페이스를 정의하는데
http://test.com/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');
 }

반응형