JS獲取元素多層嵌套思路詳解
如果一段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循環(huán)誒個獲取這個元素下面的元素,然后通過此次獲取到的元素在依次循環(huán)獲取下面的元素,直到獲取到目標元素。
// 獲取父元素 var dBox = document.getElementById('box'); // 通過父元素獲取所有div var dDiv = dBox.getElementsByTagName('div'); // 將所有的a標簽放到dArr中 var aArr = []; for(var i=0;i<dDiv.length;i++){ aArr.push(dDiv[i].getElementsByTagName('a')[0]); } // 通過a標簽獲取所有span var spanArr = []; for(var i=0;i<aArr.length;i++){ spanArr.push(aArr[i].getElementsByTagName('span')[0]); } console.log(spanArr);
缺點:消耗性能,如果再嵌套多一點,那獲取目標元素就相當?shù)穆闊?br />
思路2:通過父元素,直接獲取目標元素,但是這樣做肯定是有問題的,因為它會把父元素下的所有span都獲取到,我的想法是將獲取到的這些元素進行判斷它的父元素是不是a標簽。
var box = document.getElementById('box'); // 獲取box下面所有的span var span = box.getElementsByTagName('span'); // 定義一個數(shù)組保存過濾后的span var 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)){ // 有就添加到數(shù)組中 spans.push(dSpan[i]); } } console.log(spans);
建議用class或者自定義屬性獲取,第一和第二種方法獲取的不精確。
以上所述是小編給大家介紹的JS獲取元素多層嵌套的問題,希望對大家有所幫助,也希望大家多多支持腳本之家網(wǎng)站!
- JS遍歷數(shù)組和對象的區(qū)別及遞歸遍歷對象、數(shù)組、屬性的方法詳解
- JS遞歸遍歷對象獲得Value值方法技巧
- Node.js 使用遞歸實現(xiàn)遍歷文件夾中所有文件
- JavaScript實現(xiàn)多叉樹的遞歸遍歷和非遞歸遍歷算法操作示例
- javascript實現(xiàn)網(wǎng)頁子頁面遍歷回調(diào)的方法(涉及 window.frames、遞歸函數(shù)、函數(shù)上下文)
- js中遍歷對象的屬性和值的方法
- js Map List 遍歷使用示例
- Javascript的數(shù)組與字典用法與遍歷對象的屬性技巧
- javascript之嵌套函數(shù)使用方法
- JS實現(xiàn)水平遍歷和嵌套遞歸操作示例
相關(guān)文章
layui輸入框中只允許輸入整數(shù)的實現(xiàn)方法
今天小編就為大家分享一篇layui輸入框中只允許輸入整數(shù)的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09JS函數(shù)修改html的元素內(nèi)容,及修改屬性內(nèi)容的方法
下面小編就為大家?guī)硪黄狫S函數(shù)修改html的元素內(nèi)容,及修改屬性內(nèi)容的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10Js on及addEventListener原理用法區(qū)別解析
這篇文章主要介紹了Js on及addEventListener原理用法區(qū)別解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-07-07