javascript – 递归搜索节点树
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 递归搜索节点树,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1751字,纯文字阅读大概需要3分钟。
内容图文
场景:我有一个无序的列表项列表.在每个列表项中是一个span,每个span中都有一个img标记.所以我的html结构看起来像这样.
<ul class="slider-controls">
<li data-preview1="./images/1.1.jpeg" data-preview2="./images/1.2.jpeg"><span><img src="./images/color1.jpeg"></img></span></li>
<li data-preview1="./images/2.1.jpeg" data-preview2="./images/2.2.jpeg"><span><img src="./images/color2.jpeg"></img></span></li>
<li data-preview1="./images/3.1.jpeg" data-preview2="./images/3.2.jpeg"><span><img src="./images/color3.jpeg"></img></span></li>
</ul>
img标签只是很小的方形颜色样本,并且跨度被设计成圆形,所以你拥有的基本上是三个彩色点的颜色选择器供用户点击.
当用户点击li时,我正在使用javascript来获取数据预览,以便我可以使用该信息来更改图片.如果用户在圆圈外略微点击,这可以很好地工作.但是,如果他们在圈内点击,他们最终会点击img标签.但我需要的数据是li标签中的两个父节点!
所以我写了一个递归函数来解决这个问题.
function findUpTag(el, tag) {
console.log(el.tagName, tag);
if (el.tagName === tag) {
console.log("success!", el);
return el;
} else {
findUpTag(el.parentNode, tag);
}
}
我像findUpTag(el,“LI”)那样使用它;
我知道我的递归搜索正在工作,因为当当前元素===“LI”时,我总是得到console.log(“success”)输出.
但是,单击图像标记时的返回值始终未定义!即使我的方法找到了LI!
我究竟做错了什么?
解决方法:
这是因为你没有返回递归调用的结果.您还需要处理el.parentNode为null的情况:
function findUpTag(el, tag) {
console.log(el.tagName, tag);
if (el.tagName === tag) {
console.log("success!", el);
return el;
} else {
return el.parentNode ? findUpTag(el.parentNode, tag) : null; // <====
}
}
FWIW,虽然你可以使用递归,但没有必要;树上只有一条路.所以它可能只是一个简单的循环:
function findUpTag(el, tag) {
while (el) {
if (el.tagName === tag) {
console.log("success!", el);
return el;
}
el = el.parentNode;
}
return null;
}
内容总结
以上是互联网集市为您收集整理的javascript – 递归搜索节点树全部内容,希望文章能够帮你解决javascript – 递归搜索节点树所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。