JS获取元素多层嵌套思路详解


Posted in Javascript onMay 16, 2016

如果一段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');
// 通过父元素获取所有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);

缺点:消耗性能,如果再嵌套多一点,那获取目标元素就相当的麻烦。

思路2:通过父元素,直接获取目标元素,但是这样做肯定是有问题的,因为它会把父元素下的所有span都获取到,我的想法是将获取到的这些元素进行判断它的父元素是不是a标签。

var box = document.getElementById('box');
// 获取box下面所有的span
var span = box.getElementsByTagName('span');
// 定义一个数组保存过滤后的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)){
// 有就添加到数组中
spans.push(dSpan[i]);
}
}
console.log(spans);

建议用class或者自定义属性获取,第一和第二种方法获取的不精确。

以上所述是小编给大家介绍的JS获取元素多层嵌套的问题,希望对大家有所帮助,也希望大家多多支持三水点靠木网站!

Javascript 相关文章推荐
页面加载完后自动执行一个方法的js代码
Sep 06 Javascript
jQuery实现仿QQ头像闪烁效果的文字闪动提示代码
Nov 03 Javascript
JavaScript实现给定时间相加天数的方法
Jan 25 Javascript
Uploadify上传文件方法
Mar 16 Javascript
JS获取地址栏参数的两种方法(简单实用)
Jun 14 Javascript
基于BootStrap实现局部刷新分页实例代码
Aug 08 Javascript
Javascrip实现文字跳动特效
Nov 27 Javascript
vue时间格式化实例代码
Jun 13 Javascript
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
Apr 20 Javascript
TypeScript开发Node.js程序的方法
Apr 30 Javascript
JS实现横向轮播图(初级版)
Jun 24 Javascript
vue 翻页组件vue-flip-page效果
Feb 05 Javascript
怎么限制input的text里输入的值只能是数字(正则、js)
May 16 #Javascript
BootStrap点击下拉菜单项后显示一个新的输入框实现代码
May 16 #Javascript
在javascript中创建对象的各种模式解析
May 16 #Javascript
Bootstrap3 input输入框插入glyphicon图标的方法
May 16 #Javascript
论Bootstrap3和Foundation5网格系统的异同
May 16 #Javascript
Javascript基础教程之比较null和undefined值
May 16 #Javascript
javascript对象的相关操作小结
May 16 #Javascript
You might like
php读取html并截取字符串的简单代码
2009/11/30 PHP
PHP判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
php编程每天必学之验证码
2016/03/03 PHP
PHP创建XML接口示例
2019/07/04 PHP
jQuery fadeTo方法调整图片的透明度使用介绍
2013/05/06 Javascript
javascript 操作符(~、&amp;、|、^、)使用案例
2014/12/31 Javascript
Jquery 实现checkbox全选方法
2015/01/28 Javascript
JavaScript中的slice()方法使用详解
2015/06/06 Javascript
jQuery无缝轮播图代码
2016/12/22 Javascript
通过修改360抢票的刷新频率和突破8车次限制实现方法
2017/01/04 Javascript
详解用webpack2.0构建vue2.0超详细精简版
2017/04/05 Javascript
JS排序之快速排序详解
2017/04/08 Javascript
jQuery validata插件实现方法
2017/06/25 jQuery
javascript填充默认头像方法
2018/02/22 Javascript
Vue导出页面为PDF格式的实现思路
2018/07/31 Javascript
关于AngularJS中ng-repeat不更新视图的解决方法
2018/09/30 Javascript
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
2020/07/22 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
python利用Tesseract识别验证码的方法示例
2019/01/21 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
Django 用户认证Auth组件的使用
2020/11/30 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
CSS3点击按钮实现背景渐变动画效果
2016/10/19 HTML / CSS
Free People中国官网:波西米亚风格女装服饰
2016/08/30 全球购物
应届毕业生专业个人求职自荐信格式
2013/11/20 职场文书
不打扫卫生检讨书
2014/02/12 职场文书
党校培训自我鉴定范文
2014/03/20 职场文书
优秀求职信
2014/05/29 职场文书
大学生交通专业求职信
2014/09/01 职场文书
2015年五一劳动节演讲稿
2015/03/18 职场文书
幼儿园重阳节活动总结
2015/05/05 职场文书
检讨书范文
2019/04/16 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书
idea编译器vue缩进报错问题场景分析
2021/07/04 Vue.js
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python