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短路原理的应用示例 精简代码的途径
Dec 13 Javascript
js中javascript:void(0) 真正含义
Nov 05 Javascript
jquery图片滚动放大代码分享(2)
Aug 28 Javascript
基于Bootstrap实现Material Design风格表单插件 附源码下载
Apr 18 Javascript
Ajax的概述与实现过程
Nov 18 Javascript
原生js实现省市区三级联动代码分享
Feb 12 Javascript
vue中echarts3.0自适应的方法
Feb 26 Javascript
vue v-model实现自定义样式多选与单选功能
Jul 05 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
Aug 08 jQuery
JavaScript使用canvas绘制随机验证码
Feb 17 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
Jul 22 Javascript
Vue select 绑定动态变量的实例讲解
Oct 22 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统计数组不同元素的个数的实例方法
2019/09/26 PHP
javascript温习的一些笔记 基础常用知识小结
2011/06/22 Javascript
浅析ajax请求json数据并用js解析(示例分析)
2013/07/13 Javascript
使用Plupload实现直接上传附件至七牛云存储
2014/12/26 Javascript
JavaScript实现添加及删除事件的方法小结
2015/08/04 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
Bootstrap表单布局
2016/07/19 Javascript
node.js文件上传处理示例
2016/10/27 Javascript
AngularJS中$http的交互问题
2017/03/29 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
2017/04/24 Javascript
详解vue mint-ui源码解析之loadmore组件
2017/10/11 Javascript
vue打包的时候自动将px转成rem的操作方法
2018/06/20 Javascript
Vue实现本地购物车功能
2018/12/05 Javascript
微信小程序动画组件使用解析,类似vue,且更强大
2019/08/01 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
Python中文竖排显示的方法
2015/07/28 Python
Python机器学习之决策树算法实例详解
2017/12/06 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
Flask框架信号用法实例分析
2018/07/24 Python
Python实现字符型图片验证码识别完整过程详解
2019/05/10 Python
Python全栈之列表数据类型详解
2019/10/01 Python
html5 拖拽及用 js 实现拖拽功能的示例代码
2020/10/23 HTML / CSS
编写类String的构造函数、析构函数和赋值函数
2012/05/29 面试题
幼儿园教研活动方案
2014/01/19 职场文书
致800米运动员广播稿
2014/02/16 职场文书
开学寄语大全
2014/04/08 职场文书
活动总结怎么写
2014/04/28 职场文书
企业读书活动总结
2014/06/30 职场文书
倡议书的写法
2014/08/30 职场文书
军训结束新闻稿
2015/07/17 职场文书
2015年小学教科研工作总结
2015/07/20 职场文书
优秀教师工作总结2015
2015/07/22 职场文书
党组织关系的介绍信模板
2019/06/21 职场文书
个人工作总结(管理人员)范文
2019/08/13 职场文书
Python图像处理库PIL详细使用说明
2022/04/06 Python