国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JS獲取元素多層嵌套思路詳解

2019-11-20 10:02:45
字體:
來源:轉載
供稿:網友

如果一段html嵌套過多,在js中獲取還是比較麻煩的,我寫了幾套方案,大家可以參考參考,如果你有好的方法,也分享出來,讓我們瞧瞧。

HTML:

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>元素多層嵌套,JS獲取問題</title></head><body><div id="box"><span>span</span><div><span>span</span><a href=""><span>1</span></a></div><div><a href=""><span>2</span></a></div><div><a href=""><span>3</span></a></div></div></body></html> 

我想獲取a下面的span。

思路1:先獲取它的父元素,然后通過for循環誒個獲取這個元素下面的元素,然后通過此次獲取到的元素在依次循環獲取下面的元素,直到獲取到目標元素。

// 獲取父元素var dBox = document.getElementById('box');// 通過父元素獲取所有divvar dDiv = dBox.getElementsByTagName('div');// 將所有的a標簽放到dArr中var aArr = [];for(var i=0;i<dDiv.length;i++){aArr.push(dDiv[i].getElementsByTagName('a')[0]);}// 通過a標簽獲取所有spanvar spanArr = [];for(var i=0;i<aArr.length;i++){spanArr.push(aArr[i].getElementsByTagName('span')[0]);}console.log(spanArr); 

缺點:消耗性能,如果再嵌套多一點,那獲取目標元素就相當的麻煩。

思路2:通過父元素,直接獲取目標元素,但是這樣做肯定是有問題的,因為它會把父元素下的所有span都獲取到,我的想法是將獲取到的這些元素進行判斷它的父元素是不是a標簽。

var box = document.getElementById('box');// 獲取box下面所有的spanvar span = box.getElementsByTagName('span');// 定義一個數組保存過濾后的spanvar arr = [];for(var i=0;i<span.length;i++){// 誒個判斷span是父元素是不是A,如果是就把它添加到arr中。if(span[i].parentNode.tagName==='A'){arr.push(span[i]);}}console.log(arr); 

思路1跟思路2雖然可以,但其實它們都有缺點,如果布局再復雜一些,可能獲取到的就不是那么精確了。

如果想精確的獲取可以給每個元素添加一個class。但class的話,瀏覽器有兼容問題。

突然想到了另外一個方法。

思路:通過自定義屬性,但是因為在js中獲取js自定義屬性有兼容問題,我就用正則來判斷,這個元素是否有我自定義的屬性。

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>元素多層嵌套,JS獲取問題</title></head><body><div id="box"><span>span</span><div><span>span</span><a href=""><span isspan='span'>1</span></a></div><div><a href=""><span isspan='span'>2</span></a></div><div><a href=""><span isspan='span'>3</span></a></div></div></body></html> 

js

// 獲取父元素var dBox = document.getElementById('box');// 獲取所有子元素var dSpan = dBox.getElementsByTagName('span');// 當前元素var str = '';// 過濾后的所有span元素var spans = [];for(var i=;i<dSpan.length;i++){// 獲取當前整個元素str = dSpan[i].outerHTML;console.log(str);// 判斷當前這個元素是否有自定義屬性if(/isspan="span"/.test(str)){// 有就添加到數組中spans.push(dSpan[i]);}}console.log(spans); 

建議用class或者自定義屬性獲取,第一和第二種方法獲取的不精確。

以上所述是小編給大家介紹的JS獲取元素多層嵌套的問題,希望對大家有所幫助,也希望大家多多支持武林網網站!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 玉林市| 迁西县| 漾濞| 读书| 临夏县| 璧山县| 镇平县| 沿河| 大渡口区| 奇台县| 浙江省| 博客| 静海县| 司法| 哈巴河县| 山东| 兴安县| 福鼎市| 哈密市| 新田县| 阜城县| 阜阳市| 云南省| 明水县| 新野县| 泌阳县| 大方县| 镇原县| 邯郸县| 志丹县| 郧西县| 保德县| 高要市| 海安县| 柳河县| 新龙县| 建昌县| 樟树市| 樟树市| 太原市| 莎车县|