javascript下查找父节点的简单方法


Posted in Javascript onAugust 13, 2007

<div>
       <a href="#">标题</a>
       <ul id="demo">
           <li><a href="#" onclick="selectThisItem(this)">项目一</a></li>
               <ul>
                   <li><a href="#" onclick="selectThisItem(this)">子类一</a></li>
                   <li><a href="#" onclick="selectThisItem(this)">子类二</a></li>
               </ul>
           <li><a href="#" onclick="selectThisItem(this)">项目一</a></li>
           <li><a href="#" onclick="selectThisItem(this)">项目</a></li>
       </ul>
</div>

上面的代码中,在点击项目或子类时,因为触发的事件一样,参数也一样,能区别用户点击的到底是“项目x”还是“子类x”,除了this.innerHTML来判断它们的内在文字外,还可以根据它们在以<ul id="demo">元素为根节点的xml文档中的纵向位置(节点深度)来区别,比如“项目一”在<ul id="demo">中的节点深度是2,“子类一”的节点深度是4.

计算节点深度在排除递归方法后,找到了一个更为简单的方法:

function parentIndexOf(node,parent){
   if(node==parent){return 0;}
   for (var i=0,n=node; n=n.parentNode; i++){
       if(n==p){return i;}
       if(n==document.documentElement){return -1;} //找不到目标父节点,防止死循环
   }
}

函数的返回值是索引数字,如果入口节点与查找的父节点相同(即同一个元素),返回值为0,向上循环找到父节点后返回向上查找的节点级数,如果向上查找,到了整个页面的根节点,比如是<html>,还找不到,就返回-1,并结束循环。

返回值与String对象内置的indexOf方法相似。函数的关键是for的第二个参数n=n.parentNode,感觉比较巧妙。

Javascript 相关文章推荐
Javascript &amp; DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
Jun 02 Javascript
window.ActiveXObject使用说明
Nov 08 Javascript
js中top/parent/frame概述及案例应用
Feb 06 Javascript
JS+CSS实现下拉列表框美化效果(3款)
Aug 15 Javascript
JavaScript中的原型prototype完全解析
May 10 Javascript
关于function类中定义变量this的简单说明
May 28 Javascript
浅谈JavaScript的函数及作用域
Dec 30 Javascript
Angular 4.x 路由快速入门学习
May 03 Javascript
Vue中使用vee-validate表单验证的方法
May 09 Javascript
JS实现table表格内针对某列内容进行即时搜索筛选功能
May 11 Javascript
Vue 动态组件components和v-once指令的实现
Aug 30 Javascript
js 对象使用的小技巧实例分析
Nov 08 Javascript
根据地区不同显示时间的javascript代码
Aug 13 #Javascript
解决使用attachEvent函数时,this指向被绑定的元素的问题的方法
Aug 13 #Javascript
Track Image Loading效果代码分析
Aug 13 #Javascript
不错的JS中变量相关的细节分析
Aug 13 #Javascript
javascript-TreeView父子联动效果保持节点状态一致
Aug 12 #Javascript
TopList标签和JavaScript结合两例
Aug 12 #Javascript
Javascript-Mozilla和IE中的一个函数直接量的问题分析
Aug 12 #Javascript
You might like
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
2007/01/29 PHP
PHP导航下拉菜单的实现如此简单
2013/09/22 PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
2015/08/28 PHP
Ubuntu 16.04下安装PHP 7过程详解
2017/03/28 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
2017/11/06 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
Laravel-admin之修改操作日志的方法
2019/09/30 PHP
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
基于jQuery实现自动轮播旋转木马特效
2015/11/02 Javascript
详解JavaScript的Date对象(制作简易钟表)
2020/04/07 Javascript
Bootstrap3学习笔记(二)之排版
2016/05/20 Javascript
高效Web开发的10个jQuery代码片段
2016/07/22 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
2017/05/05 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
解决vue-cli创建项目的loader问题
2018/03/13 Javascript
Jquery实现获取子元素的方法分析
2019/08/24 jQuery
Vite和Vue CLI的优劣
2021/01/30 Vue.js
天翼开放平台免费短信验证码接口使用实例
2013/12/18 Python
六个窍门助你提高Python运行效率
2015/06/09 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
python 实现矩阵填充0的例子
2019/11/29 Python
Python实现自动访问网页的例子
2020/02/21 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
python自动化发送邮件实例讲解
2021/01/04 Python
草莓网英国官网:Strawberrynet UK
2017/02/12 全球购物
世界上最大的字体市场:MyFonts
2020/01/10 全球购物
自荐信怎么写呢?
2013/12/09 职场文书
幼儿园中秋节活动反思
2014/02/16 职场文书
优秀管理者获奖感言
2014/02/17 职场文书
保护环境的建议书
2014/03/12 职场文书
小学教师自我鉴定范文
2014/03/20 职场文书
公司担保书格式范文
2014/05/12 职场文书
大学专科自荐信
2014/06/17 职场文书
2014基建处领导班子“四风”对照检查材料思想汇报
2014/10/04 职场文书
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android