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 相关文章推荐
IE和Firefox下javascript的兼容写法小结
Dec 10 Javascript
代码触发js事件(click、change)示例应用
Dec 13 Javascript
jquery实现键盘左右翻页特效
Apr 30 Javascript
node+express制作爬虫教程
Nov 11 Javascript
Bootstrap进度条学习使用
Feb 09 Javascript
jQuery实现导航栏头部菜单项点击后变换颜色的方法
Jul 19 jQuery
jQuery dateRangePicker插件使用方法详解
Jul 28 jQuery
Vue.js自定义事件的表单输入组件方法
Mar 08 Javascript
Vue axios设置访问基础路径方法
Sep 19 Javascript
jQuery表单元素过滤选择器用法实例分析
Feb 20 jQuery
JavaScript利用键盘码控制div移动
Mar 19 Javascript
详解node.js 事件循环
Jul 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
《雄兵连》系列首部大电影《烈阳天道》:可能是因为期望值太高了
2020/08/18 国漫
木翼下载系统中说明的PHP安全配置方法
2007/06/16 PHP
简单的php数据库操作类代码(增,删,改,查)
2013/04/08 PHP
Laravel 5框架学习之子视图和表单复用
2015/04/09 PHP
双冒号 ::在PHP中的使用情况
2015/11/05 PHP
php连接oracle数据库的核心步骤
2016/05/26 PHP
tp5实现微信小程序多图片上传到服务器功能
2018/07/16 PHP
基于jquery的模态div层弹出效果
2010/08/21 Javascript
JQuery 在线引用及测试引用是否成功
2014/06/24 Javascript
实例讲解js验证表单项是否为空的方法
2016/01/09 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
Bootstrap每天必学之导航条(二)
2016/03/01 Javascript
vue使用axios实现文件上传进度的实时更新详解
2017/12/20 Javascript
详解JS数值Number类型
2018/02/07 Javascript
微信小程序倒计时功能实例代码
2018/07/17 Javascript
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
举例讲解Python中的算数运算符的用法
2015/05/13 Python
浅析Python中的for 循环
2016/06/09 Python
浅谈使用Python变量时要避免的3个错误
2017/10/30 Python
Python3生成手写体数字方法
2018/01/30 Python
django的ORM操作 删除和编辑实现详解
2019/07/24 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
2019/11/26 Python
pytorch 修改预训练model实例
2020/01/18 Python
python3字符串输出常见面试题总结
2020/12/01 Python
美国优质马术服装购买网站:Breeches.com
2019/12/16 全球购物
商务日语专业毕业生求职信
2013/10/26 职场文书
医科大学生的自我评价
2013/12/04 职场文书
党员自我评价分享
2013/12/13 职场文书
团委竞选演讲稿
2014/04/24 职场文书
离婚财产处理协议书
2014/09/30 职场文书
庆祝国庆节标语
2014/10/09 职场文书
总经理助理岗位职责
2015/01/31 职场文书
《猴王出世》教学反思
2016/02/23 职场文书
django 认证类配置实现
2021/11/11 Python
我的收音机情缘
2022/04/05 无线电