亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

jacascript DOM節點――元素節點、屬性節點、文本節點

2019-11-19 16:48:19
字體:
來源:轉載
供稿:網友

元素節點

  元素節點就是HTML標簽元素,元素節點主要提供了對元素標簽名、子節點及屬性的訪問;

  元素節點的三個node屬性:nodeType:1、nodeName/TagName:元素的標簽名大寫、nodeValue:null;

  其父節點 parentNode 指向包含該元素節點的元素節點 Element 或文檔節點 Document;

  元素的 childNodes 屬性中包含了它的所有子節點,這些子節點可能是元素、文本、注釋、處理指令節點;

  childNodes 結合 NodeType 可以檢查有幾個元素子節點:

   <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()四個,可以針對任何屬性使用,包括那些以HTMLElement類型屬性的形式定義的屬性;

  • obj.hasAttribute(attr)方法返回一個布爾值,表示當前元素節點是否包含指定屬性;
  • IE6/IE7不支持 hasAttribute() 方法;
  • obj.hasAttribute(attr)檢測 class 屬性時,直接用 class 就可以了,不要用className;
  • obj.hasAttribute(attr)檢測 for屬性時,直接用 for就可以了,不要用htmlFor;
 <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,未設置過的特性,如果強行為其設置 specified 屬性,則報錯。

  元素節點有一個 attributes 屬性,它包含一個 NamedNodeMap,包含當前元素所有的屬性及屬性值,與NodeList類似,也是一個動態的集合。元素的每一個屬性都由一個Attr節點表示,每個節點都保存在NamedNodeMap對象中,每個節點的 nodeName 就是屬性的名稱,節點的 nodeValue 就是屬性的值;

  createAttribute(attr) 創建新的屬性節點;

  attributes屬性包含以下四個方法:

  1. obj.attributes.setNamedItem(attr);  向列表中添加節點,該方法無返回值;要先創建屬性,在以nodeValue的形式賦屬性值,在傳入setNamedItem
  2. obj.attributes.getNamedItem(attr);  返回 nodeName 屬性等于 attr 的節點;以" attr=value " 形式返回;
  3. obj.attributes.removeNamedItem(attr); 從列表中移除 nodeName 屬性等于 attr 的節點,并返回該節點;
  4. 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,無返回值;
  • replaceData(index,count,text) 方法用 text 替換從 index 指定位置開始到 index+count 為止的文本,無返回值;
  • substringData(index,count) 方法提取從 index 指定的位置開始到 offset+count 為止處的字符串,并返回該字符串。原來的文本節點無變化;

以上所述是小編給大家介紹的jacascript DOM節點――元素節點、屬性節點、文本節點,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品av在线播放| 色婷婷综合久久久久中文字幕1| 国产经典一区二区| 中文字幕欧美亚洲| 一区二区三区无码高清视频| 欧美激情在线视频二区| 亚洲成人av资源网| 国产精品视频自在线| 日韩精品一二三四区| 亚洲精品久久视频| 日韩综合中文字幕| 亚洲女人初尝黑人巨大| 777精品视频| 欧美日韩国产成人在线观看| 最近2019年好看中文字幕视频| 亚洲男女自偷自拍图片另类| 中文字幕亚洲欧美一区二区三区| 国产成人精品日本亚洲专区61| 91大神在线播放精品| 成人免费直播live| 91精品国产综合久久香蕉| 日韩av免费看网站| 日韩av在线网站| 欧美一级免费看| 91久久久精品| 欧美人交a欧美精品| 亚洲精品视频久久| 国产精品午夜国产小视频| 91精品啪aⅴ在线观看国产| 久久久成人精品| 国产综合在线视频| 国产男女猛烈无遮挡91| 欧美日韩国产激情| 成人av番号网| 精品国产一区二区三区久久久| 日本久久久a级免费| 国产一区二区三区视频免费| 亚洲精品色婷婷福利天堂| 尤物精品国产第一福利三区| 亚洲xxx大片| 日韩欧美国产免费播放| 91精品国产91久久久久福利| 国产精品中文久久久久久久| 日本欧美黄网站| 亚洲国产成人一区| 国产精品丝袜久久久久久高清| 亚洲国产精品成人va在线观看| www国产91| 国产欧美日韩专区发布| 欧美午夜片在线免费观看| 亚洲欧美日韩精品| 欧美视频一二三| 亚洲精品二三区| www.亚洲天堂| 日本精品视频网站| 成人免费观看49www在线观看| 欧美性开放视频| 亚洲成人精品av| www.美女亚洲精品| 国产成人jvid在线播放| 国产精品pans私拍| 8090理伦午夜在线电影| 国产精品久久网| 一区二区三区国产视频| 国产在线拍揄自揄视频不卡99| 欧美午夜宅男影院在线观看| 亚洲а∨天堂久久精品9966| 欧美日韩xxxxx| 亚洲欧美在线磁力| 69av视频在线播放| 色偷偷偷综合中文字幕;dd| 91九色国产社区在线观看| 亚洲日本欧美中文幕| 97在线精品视频| 精品久久久久久久久久ntr影视| 91精品啪aⅴ在线观看国产| 亚洲国产精品美女| 国产久一一精品| 欧洲成人性视频| 欧美日韩中文字幕在线| 欧美性极品xxxx做受| 中文字幕精品视频| 色综合久久中文字幕综合网小说| 69久久夜色精品国产69乱青草| 欧美黑人狂野猛交老妇| 久久久久久亚洲精品| 色综合久久中文字幕综合网小说| 成人亚洲综合色就1024| 亚洲一级黄色av| 欧美性少妇18aaaa视频| 国产精品99久久久久久白浆小说| www国产91| 欧美老女人bb| 欧美性生交xxxxxdddd| 日韩一区二区久久久| 2021国产精品视频| 国产成人亚洲综合91精品| 国产精品久久久久久久久男| 欧美性猛交xxxx免费看久久久| 夜夜躁日日躁狠狠久久88av| 欧美黄色成人网| 成人免费视频网址| 久久久久久免费精品| 国产精品偷伦视频免费观看国产| 亚洲乱码国产乱码精品精天堂| 777国产偷窥盗摄精品视频| 国产成人福利夜色影视| 国产精品久久久久久久久久久不卡| 欧美韩国理论所午夜片917电影| 欧美成人午夜免费视在线看片| 国产免费一区二区三区香蕉精| 欧美一级成年大片在线观看| 国产精品一区二区三区久久| 91色琪琪电影亚洲精品久久| 欧美专区国产专区| www高清在线视频日韩欧美| 国产亚洲精品激情久久| 久久天天躁狠狠躁夜夜爽蜜月| 欧美性开放视频| 日韩av电影中文字幕| 日韩一区二区久久久| 欧美在线国产精品| 亚洲人成网站777色婷婷| 国产一区二区在线播放| 亚洲最新av网址| 久久久久久亚洲精品中文字幕| 91精品免费久久久久久久久| 欧美成人精品在线| 91夜夜未满十八勿入爽爽影院| 色偷偷888欧美精品久久久| 国产一级揄自揄精品视频| 国产自产女人91一区在线观看| 孩xxxx性bbbb欧美| 欧美性生交大片免网| 日韩一级裸体免费视频| 在线一区二区日韩| 欧美在线一级va免费观看| 欧美野外猛男的大粗鳮| 亚洲的天堂在线中文字幕| 成人性生交大片免费看视频直播| 日韩欧美在线视频免费观看| 久久国产精品99国产精| 欧美日产国产成人免费图片| 国产精品久久久久久搜索| 97精品伊人久久久大香线蕉| 国产欧美日韩免费看aⅴ视频| 久久在精品线影院精品国产| 亚洲成人久久电影| 国产深夜精品福利| 在线观看国产成人av片| 日本久久久久亚洲中字幕| 久久噜噜噜精品国产亚洲综合| 国产成人午夜视频网址| 日韩电影在线观看永久视频免费网站| 国产成人在线视频| 久久这里有精品视频| 日韩成人在线电影网| 亚洲精品国产精品国产自| 国产在线播放不卡| 国产精品爱啪在线线免费观看| 日韩av资源在线播放| 91九色国产社区在线观看| 国产精品午夜一区二区欲梦| 欧美午夜片在线免费观看|