jacascript DOM 노드―요소 노드,속성 노드,텍스트 노드

14195 단어 자바 scriptdom노드
원소 노드
요소 노드 는 HTML 태그 요소 이 고 요소 노드 는 주로 요소 태그 이름,하위 노드 와 속성 에 대한 접근 을 제공 합 니 다.
요소 노드 의 세 가지 node 속성:nodeType:1,nodeName/TagName:요소 의 태그 이름 대문자,nodeValue:null;
부모 노드 parentNode 는 이 요소 노드 를 포함 하 는 요소 노드 Element 또는 문서 노드 문 서 를 가리킨다.
요소 의 childNodes 속성 에는 모든 하위 노드 가 포함 되 어 있 습 니 다.이 하위 노드 는 요소,텍스트,주석,처리 명령 노드 일 수 있 습 니 다.
childNodes 는 Node Type 과 결합 하여 몇 가지 요소 의 하위 노드 를 검사 할 수 있 습 니 다.

   <ul class="list" id="list">
      <li class="in"></li>
      <li class="in"></li>
    </ul>
    <script>
      var oList = document.getElementById('list');
      var children = oList.childNodes;
      var num = 0;
      for(var i = 0; i < children.length; i++){
        if(children[i].nodeType == 1){
          num++;
        }
      }
      console.log(num);//2   2        
    </script>
속성 을 조작 하 는 방법 은 주로 hasAttribute(),getAttribute(),setAttribute(),removeAttribute()네 가지 가 있 는데 그 어떠한 속성 에 도 사용 할 수 있 습 니 다.HTML Element 형식 속성 으로 정 의 된 속성 을 포함 합 니 다.
  • obj.hasAttribute(attr)방법 은 불 값 을 되 돌려 줍 니 다.현재 요소 노드 에 지정 한 속성 이 포함 되 어 있 는 지 여부 입 니 다.
  • IE6/IE7 은 hasAttribute()방법 을 지원 하지 않 습 니 다.
  • obj.hasAttribute(attr)에서 class 속성 을 감지 할 때 class 를 사용 하면 됩 니 다.className 을 사용 하지 마 십시오.
  • obj.hasAttribute(attr)에서 for 속성 을 검 측 할 때 직접 for 를 사용 하면 됩 니 다.html For 를 사용 하지 마 십시오.
  • 
     <div class="wrapper" id='test' for="nice" style="width:200px;height:100px;background:#f0f">123</div>
        <script type="text/javascript">
          var oTest = document.getElementById('test');
          //IE6/IE7   hasAttribute  
          console.log(oTest.hasAttribute('class'));//true
          console.log(oTest.hasAttribute('className'));//false  
          console.log(oTest.hasAttribute('id'));//true
          console.log(oTest.hasAttribute('style'));//true
          console.log(oTest.hasAttribute('for'));//true
          console.log(oTest.hasAttribute('htmlFor'));//false
        </script>
  • obj.getAttribute(attr)방법 은 속성의 값 을 얻 는 데 사 용 됩 니 다.주어진 이름 의 속성 이 존재 하지 않 거나 인자 가 없 으 면 null 을 되 돌려 줍 니 다.
  • obj.getAttribute(attr)가 class 를 가 져 올 때 class 를 직접 사용 하면 됩 니 다.IE6/IE7 을 제외 하고 IE6/IE7 의 getAttribute(attr)방법 은 className 을 사용 해 야 합 니 다.
  • obj.getAttribute(attr)에서 for 를 가 져 올 때 직접 for 를 사용 하면 됩 니 다.
  • obj.setAttribute(attr,value)방법 은 두 개의 인 자 를 받 아들 입 니 다.설정 할 속성 이름과 값 이 존재 하면 기 존 값 을 바 꿉 니 다.속성 이 존재 하지 않 으 면 이 속성 을 만 들 고 해당 하 는 값 을 설정 합 니 다.이 방법 은 반환 값 이 없습니다.
  • obj.setAttribute(attr,value)가 class 를 설정 할 때 class 를 직접 사용 하면 됩 니 다.
  • obj.setAttribute(attr,value)가 for 를 설정 할 때 직접 for 를 사용 하면 됩 니 다.
  • obj.setAttribute(attr,value)에서 style 을 설정 할 때 style 을 직접 사용 하면 됩 니 다.IE7 이하 에 서 는 obj.style.setAttribute("cssText",value)를 사용 합 니 다.  이곳 의 style 은 줄 모양 일 뿐 입 니 다.
  • 우 리 는 보통 obj.currentStyle 을 사용 합 니까?obj.currentStyle[attr] : getComputedStyle(obj)[attr]; 원소 의 현재 스타일 가 져 오기;
  • 
     <script type="text/javascript">
          var oTest = document.getElementById('test');
          oTest.setAttribute('class','aaa'); //setAttribute   class    
          oTest.setAttribute('className','bbb');
          console.log(oTest.class);//undefined IE8           
          console.log(oTest.getAttribute('class'));//aaa getAttribute   class    
          console.log(oTest.className);//aaa
          console.log(oTest.getAttribute('className'));//bbb
          oTest.setAttribute('style','border:1px solid red;height: 100px;'); //setAttribute    style     
          console.log(oTest.style);//   style  ,        ,   ,        
          console.log(oTest.getAttribute('style'));
          //border:1px solid red;height: 100px; getAttribute    style     
          oTest.setAttribute('for','eee'); //setAttribute   for    
          oTest.setAttribute('htmlFor','fff')
          console.log(oTest.for);//undefined  IE8           
          console.log(oTest.htmlFor);//undefined
          console.log(oTest.getAttribute('for'));//eee getAttribute   for    
          console.log(oTest.getAttribute('htmlFor'));//fff
          console.log(oTest);
          //<div class="aaa" id="test" for="eee" style="ddd" classname="bbb" htmlfor="fff">123</div>
        </script>
  • obj.removeAttribute(attr)방법 은 요소 의 속성 을 철저히 삭제 하 는 데 사 용 됩 니 다.이 방법 은 요소 의 속성 값 을 철저히 삭제 할 뿐만 아니 라 요소 속성 도 삭제 합 니 다.이 방법 은 반환 값 이 없습니다.
  • 
    <div class="wrapper" id='test' for="nice" style="background:#f0f;height: 100px;">123</div>
        <script type="text/javascript">
          var oTest = document.getElementById('test');
          oTest.removeAttribute('class'); //removeAttribute   class    
          oTest.removeAttribute('for');
          oTest.removeAttribute('style'); 
          console.log(oTest);// <div id="test">123</div>
        </script>
    속성 노드
    속성 노드,어떤 것 은 특성 노드 라 고 하 는데,차이 가 많 지 않다.
    속성 노드 의 세 개의 node 속성,nodeType:2,nodeName/name:속성 이름,nodeValue/value:속성 값;
    속성 노드 에 또 하나의 specified 속성 이 있 습 니 다.specified 는 불 값 입 니 다.특성 이 코드 에서 지정 한 것 인지,기본 적 인 것 인지 구별 합 니 다.이 속성의 값 이 true 라면 HTML 에 해당 하 는 특성 을 지정 하거나 setAttribute()방법 으로 이 속성 을 설정 한 것 을 의미 합 니 다.IE 에 서 는 설정 되 지 않 은 모든 특성의 이 속성 값 이 false 이 고,다른 브 라 우 저 에 서 는 설 정 된 모든 특성의 이 속성 값 이 true 이 며,설정 되 지 않 은 특성 입 니 다.지 정 된 속성 을 강하 게 설정 하면 오류 가 발생 합 니 다.
    요소 노드 는 attributes 속성 이 있 습 니 다.NamedNodeMap 은 현재 요소 의 모든 속성 과 속성 값 을 포함 하고 NodeList 와 유사 하 며 동적 집합 입 니 다.요소 의 모든 속성 은 하나의 Attr 노드 에 의 해 표 시 됩 니 다.모든 노드 는 NamedNodeMap 대상 에 저 장 됩 니 다.각 노드 의 nodeName 은 속성의 이름 이 고 노드 의 nodeValue 는 속성의 값 입 니 다.
    createAttribute(attr)에서 새로운 속성 노드 만 들 기;
    attributes 속성 은 다음 과 같은 네 가지 방법 을 포함 합 니 다.
  • obj.attributes.setNamedItem(attr);  목록 에 노드 를 추가 합 니 다.이 방법 은 반환 값 이 없습니다.속성 을 먼저 만 들 려 면 nodeValue 형식 으로 속성 값 을 부여 하고 setNamedItem
  • 에 들 어 갑 니 다.
  • obj.attributes.getNamedItem(attr);  nodeName 속성 이 attr 와 같은 노드 를 되 돌려 줍 니 다."attr=value"형식 으로 되 돌려 줍 니 다.
  • obj.attributes.removeNamedItem(attr); 목록 에서 nodeName 속성 이 attr 와 같은 노드 를 제거 하고 이 노드 를 되 돌려 줍 니 다.
  • obj.attributes.item(index); 아래 표 시 된 index 위치 에 있 는 노드 를 되 돌려 주 고[]로 대체 할 수도 있 습 니 다.obj.attributes[index];
  • 
    <div class="wrapper" id='test' for="nice" style="background:#f0f;height: 100px;">123</div>
        <script type="text/javascript">
          var oTest = document.getElementById('test');
          console.log(oTest.attributes);// NamedNodeMap {0: class, 1: id, 2: for, 3: style, length: 4}
          console.log(oTest.attributes.item(1).specified);//true
          console.log(oTest.attributes.getNamedItem('id'));//id='test'
          console.log(typeof oTest.attributes.getNamedItem('id'));//object
          console.log(oTest.attributes.removeNamedItem('for'));//id='test'
          console.log(oTest.attributes);// NamedNodeMap {0: class, 1: id, 2: style, length: 3}
          var abc = document.createAttribute("abc"); 
          abc.nodeValue = "1234567";
          oTest.attributes.setNamedItem(abc);
          //obj.attributes.setNamedItem(attr)       ,  nodeValue       ,   setNamedItem
          console.log(oTest.attributes);// NamedNodeMap {0: class, 1: id, 2: style, 3: abc, length: 4}
          console.log(oTest.attributes.item(1));//id='test'
          console.log(oTest.attributes[1]);//id='test'
        </script>
    attributes 속성 은 주로 속성 을 옮 겨 다 니 는 데 사 용 됩 니 다.DOM 구 조 를 HTML 문자열 로 정렬 해 야 할 때 요소 특성 을 옮 겨 다 니 는 경우 가 많 습 니 다.
    
    <div class="wrapper" id='test' for="nice" style="background:#f0f;height: 100px;">123</div>
        <script type="text/javascript">
          function outputAttributes(obj){
            var arr = [],
              attrName,
              attrValue,
              i;
            for(i = 0; i < obj.attributes.length; i++){
              attrName = obj.attributes[i].nodeName;
              attrValue = obj.attributes[i].nodeValue;
              arr.push(attrName + '=\"' + attrValue + '\"');
            }
            return arr.join(" ");
          }
          var oTest = document.getElementById('test');
          console.log(oTest.attributes);//NamedNodeMap {0: class, 1: id, 2: for, 3: style, length: 4}
          console.log(typeof oTest.attributes);//object
          console.log(outputAttributes(oTest));
          //class="wrapper" id="test" for="nice" style="background:#f0f;height: 100px;"
          console.log(typeof outputAttributes(oTest));//string
        </script>
    텍스트 노드
    텍스트 노드 의 세 개의 node 속성,nodeType:3,nodeName:'\#text',nodeValue:노드 에 포 함 된 텍스트,부모 노드 parentNode 는 이 텍스트 노드 를 포함 하 는 요소 노드 를 가리 키 며 텍스트 노드 에는 하위 노드 가 없습니다.
    텍스트 노드 에 대해 가장 많은 호환성 문 제 는 공백 텍스트 노드 문제 입 니 다.IE8 및 이하 브 라 우 저 는 빈 텍스트 노드 를 식별 하지 않 고 다른 브 라 우 저 는 빈 텍스트 노드 를 식별 합 니 다.그래서 가끔 우 리 는 빈 텍스트 노드 를 정리 해 야 한다.
    
     <div id="test">
          <div>hello world!</div>
        </div>
        <script type="text/javascript">
          var oTest = document.getElementById('test');
          //                
          console.log(oTest.firstChild);//" "  
          console.log(oTest.lastChild);//" "  
          console.log(oTest.childNodes);//[text, div, text]  
          //       [text, div, text],text        
          //IE8        [div],          
          console.log(oTest.childNodes.length); //3
          //       3
          //IE8        1,          
          //        
          function cleanWhitespace(oEelement){
             for(var i = 0; i < oEelement.childNodes.length; i++){
               var node = oEelement.childNodes[i];
               if(node.nodeType == 3 && !/\S/.test(node.nodeValue)){
                 node.parentNode.removeChild(node);
               }
             }
          }
          cleanWhitespace(oTest);
          console.log(oTest.childNodes);//[div]
          console.log(oTest.childNodes.length); //1
        </script>
    텍스트 노드 속성:
  • 텍스트 노드 의 data 속성 은 nodeValue 속성 과 같 습 니 다.
  • wholeText 속성 은 현재 Text 노드 와 인접 한 Text 노드 를 전체 로 되 돌려 줍 니 다.대부분의 경우 wholeText 속성의 반환 값 은 data 속성 과 textContent 속성 과 같 습 니 다.
  • 텍스트 노드 의 length 속성 은 노드 문자 의 수 를 저장 하고 nodeValue.length,data.length 도 같은 값 을 저장 합 니 다.   
  • 
    <div id="testData">hello world!</div>
        <div id="testWholeText">hello world!</div>
        <script type="text/javascript">
          var oTestData = document.getElementById('testData');
          //                
          console.log(oTestData.firstChild);//"hello world!"  
          console.log(typeof oTestData.firstChild);//object  
          console.log(oTestData.childNodes.length); //1
          console.log(oTestData.firstChild.nodeValue);//"hello world!" 
          console.log(typeof oTestData.firstChild.nodeValue);//string
          console.log(oTestData.firstChild.data);//"hello world!" 
          //     data   nodeValue    ,   string   
          console.log(oTestData.firstChild.data === oTestData.firstChild.nodeValue);//true
          var oTestWholeText = document.getElementById('testWholeText');
          console.log(oTestWholeText.childNodes); //[text]
          console.log(oTestWholeText.childNodes.length); //1
          console.log(oTestWholeText.firstChild.wholeText);//hello world!
          console.log(oTestWholeText.firstChild.data);//hello world!  
          oTestWholeText.firstChild.splitText('or');
          console.log(oTestWholeText.childNodes); //[text, text]
          console.log(oTestWholeText.childNodes.length); //2
          console.log(oTestWholeText.firstChild);//#text
          console.log(oTestWholeText.firstChild.wholeText);//hello world!
          //wholeText     Text      Text  ,        。
          console.log(oTestData.firstChild.length);//12
          console.log(oTestData.firstChild.nodeValue.length);//12
          console.log(oTestData.firstChild.data.length);//12
        </script>
    텍스트 노드 방법:
    텍스트 노드 의 조작 은 문자열 의 조작 방법 과 상당히 유사 하 다.일반적으로,우 리 는 텍스트 를 가 져 오 는 데 innerHTML 을 사용 한 다음 문자열 을 제거 하 는 조작 방법 을 사용한다.
  • document.createTextNode(text); 방법 은 텍스트 노드 를 만 드 는 데 사 용 됩 니 다.이 방법 은 하나의 인 자 를 받 고 노드 의 텍스트 를 삽입 해 야 합 니 다.삽 입 된 것 은 텍스트 입 니 다.탭 을 써 도 텍스트 로 삽 입 됩 니 다.
  • splitText(index)방법 은 한 텍스트 노드 를 두 텍스트 노드 로 나 누 는데 그것 이 바로 index 가 지정 한 위치 에 따라 nodeValue 값 을 분할 하 는 것 이다.원래 텍스트 노드 는 처음부터 지 정 된 위치 까지 의 내용 을 포함 합 니 다.이 방법 은 남 은 텍스트 를 포함 하 는 새 텍스트 노드 를 되 돌려 줍 니 다.
  • appendData(text)방법 은 text 를 노드 의 끝 에 추가 합 니 다.이 방법 은 반환 값 이 없습니다.
  • deleteData(index,count)방법 은 index 가 지정 한 위치 에서 count 문 자 를 삭제 하고 반환 값 이 없습니다.
  • insertData(index,text)방법 은 index 가 지정 한 위치 에 text 를 삽입 하고 반환 값 이 없습니다.
  • replace Data(index,count,text)방법 은 index 가 지정 한 위치 에서 index+count 까지 의 텍스트 를 text 로 교체 하고 반환 값 이 없습니다.
  • substringData(index,count)방법 은 index 가 지정 한 위치 에서 부터 offset+count 까지 의 문자열 을 추출 하고 이 문자열 을 되 돌려 줍 니 다.원래 텍스트 노드 는 변화 가 없습니다.
  • 위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 jacascript DOM 노드―요소 노드,속성 노드,텍스트 노드 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 제때에 여러분 에 게 답 할 것 입 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

    좋은 웹페이지 즐겨찾기