getElementsByTagNameNS 메소드란?

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

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


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

<rss version="2.0" xmlns:aaa="http://test.com/aaa/">
위 소스는 RSS에서 사용되는 방법으로
aaa 라는 네임스페이스를 정의하는데
http://test.com/aaa/ 에서 참고한다는 표현이다.

네임 스페이스를 포함한 태그

<aaa:bbb>~~~~</aaa:bbb>
위 태그는 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'); 
 }

댓글
  • No Nickname
    No Comment
  • 권한이 없습니다.
    {{m_row.m_nick}}
    -
목록형 📷 갤러리형
제목
[기본형] HTML (with 부트스트랩5.3 , jquery 3.7, vue.js)
유용한 리눅스(LINUX) 명령어
[공지] 기술 게시판
4.28
4.29
4.30
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
5.11
5.12
5.13
5.14
5.15
5.16
5.17
5.18
5.19
5.20
5.21
5.22
5.23
5.24
5.25
5.26
5.27
5.28
5.29
5.30
5.31
6.1