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 相关文章推荐
服务器安全设置的几个注册表设置
Jul 28 Javascript
js改变img标签的src属性在IE下没反应的解决方法
Jul 23 Javascript
移动Web中图片自适应的两种JavaScript解决方法
Jun 18 Javascript
javascript中Array()数组函数详解
Aug 23 Javascript
JavaScript处理解析JSON数据过程详解
Sep 11 Javascript
GitHub上一些实用的JavaScript的文件压缩解压缩库推荐
Mar 13 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
Aug 05 Javascript
微信小程序开发之Tabbar实例详解
Jan 09 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
Jan 26 Javascript
使用淘宝镜像cnpm安装Vue.js的图文教程
May 17 Javascript
基于webpack4.X从零搭建React脚手架的方法步骤
Dec 23 Javascript
JavaScript实现动态留言板
Mar 16 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
Terran热键控制
2020/03/14 星际争霸
php 求质素(素数) 的实现代码
2011/04/12 PHP
一个实用的php验证码类
2017/07/06 PHP
破除一些网站复制、右键限制
2006/11/04 Javascript
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
2012/08/17 Javascript
JS判断数组中是否有重复值得三种实用方法
2013/08/16 Javascript
jQuery中使用Ajax获取JSON格式数据示例代码
2013/11/26 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
2015/10/29 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
2016/01/07 Javascript
js自定义select下拉框美化特效
2016/05/12 Javascript
webpack构建换肤功能的思路详解
2017/11/27 Javascript
深入理解ES6中let和闭包
2018/02/22 Javascript
node.js博客项目开发手记
2018/03/16 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
关于vue-cli 3配置打包优化要点(推荐)
2019/04/22 Javascript
JS如何寻找数组中心索引过程解析
2020/06/01 Javascript
js+css实现全屏侧边栏
2020/06/16 Javascript
Vue2.0 ES6语法降级ES5的操作
2020/10/30 Javascript
[57:31]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第一场 2月1日
2021/03/11 DOTA
pandas将numpy数组写入到csv的实例
2018/07/04 Python
初探利用Python进行图文识别(OCR)
2019/02/26 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
2019/04/04 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
使用HTML5 Canvas绘制圆角矩形及相关的一些应用举例
2016/03/22 HTML / CSS
Sephora丝芙兰泰国官方网站:国际知名化妆品购物
2017/11/15 全球购物
eBay荷兰购物网站:eBay.nl
2020/06/26 全球购物
环境科学专业研究生求职信
2013/10/02 职场文书
蛋糕店的商业计划书范文
2014/01/27 职场文书
公证委托书标准格式
2014/09/11 职场文书
求职自我评价范文100字
2014/09/23 职场文书
合作意向协议书
2015/01/29 职场文书
css filter和getUserMedia的联合使用
2022/02/24 HTML / CSS
Apache Hudi的多版本清理服务彻底讲解
2022/03/31 Servers