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 相关文章推荐
javascript针对DOM的应用分析(二)
Apr 15 Javascript
JavaScript 图像动画的小demo
May 23 Javascript
获取中文字符串的实际长度代码
Jun 05 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
Dec 24 Javascript
浅析使用BootStrap TreeView插件实现灵活配置快递模板
Nov 28 Javascript
Angular表格神器ui-grid应用详解
Sep 29 Javascript
jQuery基于随机数解决中午吃什么去哪吃问题示例
Dec 29 jQuery
js实现网页同时进行多个倒计时功能
Feb 25 Javascript
通过vue手动封装on、emit、off的代码详解
May 29 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
Nov 12 Javascript
微信小程序静默登录的实现代码
Jan 08 Javascript
Vue中引入svg图标的两种方式
Jan 14 Vue.js
怎么限制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伪静态页面函数附使用方法
2008/06/20 PHP
discuz论坛 用户登录 后台程序代码
2008/11/27 PHP
php 不同编码下的字符串长度区分
2009/09/26 PHP
解析php中call_user_func_array的作用
2013/06/07 PHP
VIM中设置php自动缩进为4个空格的方法详解
2013/06/14 PHP
163的邮件用phpmailer发送(实例详解)
2013/06/24 PHP
javascript import css实例代码
2008/07/18 Javascript
jQuery JSON的解析方式分享
2011/04/05 Javascript
javascript实现简单的页面右下角提示信息框
2015/07/31 Javascript
easyui messager alert 三秒后自动关闭提示的实例
2016/11/07 Javascript
js实现固定宽高滑动轮播图效果
2017/01/13 Javascript
使用BootStrap实现标签切换原理解析
2017/03/14 Javascript
vue.js移动端tab组件的封装实践实例
2017/06/30 Javascript
react native与webview通信的示例代码
2017/09/25 Javascript
Vue2 配置 Axios api 接口调用文件的方法
2017/11/13 Javascript
[40:55]Liquid vs LGD 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
python里大整数相乘相关技巧指南
2014/09/12 Python
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
详细介绍Python中的偏函数
2015/04/27 Python
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
利用Python写一个爬妹子的爬虫
2018/06/08 Python
详解pycharm连接不上mysql数据库的解决办法
2020/01/10 Python
在Django中预防CSRF攻击的操作
2020/03/13 Python
python实现udp传输图片功能
2020/03/20 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
keras中的History对象用法
2020/06/19 Python
CSS3基础(RGBa、text-shadow、box-shadow、border-radius)
2012/11/13 HTML / CSS
英国巧克力贸易公司:Chocolate Trading Company
2017/03/21 全球购物
澳大利亚家具和家居用品在线:BROSA
2017/11/02 全球购物
.NET程序员的几道面试题
2012/06/01 面试题
参观考察邀请函范文
2014/01/29 职场文书
土地租赁协议书
2015/01/29 职场文书
2019年中学生的思想品德评语集锦
2019/12/19 职场文书
HTML中的表格元素介绍
2022/02/28 HTML / CSS