当前位置: 首页 > 图文教程 > 网络编程 > Javascript > javascript下查找父节点的简单方法

Javascript
javascript之循环停顿上下滚动
textarea保留换行的注意事项
不错的一篇关于javascript-prototype继承
非常不错的三种简洁的Tab导航(网页选项卡)简析
一个用js实现控制台控件的代码
【消息提示组件】,兼容IE6/7&&FF2
一个符号插入器 中用到的js代码
js中的escape及unescape函数的php实现代码
用javascript实现画板的代码
比较实用的复选框的实用javascript脚本
js下获得单选框的值的代码
IE不出现Flash激活框的小发现的js实现方法
超强的IE背景图片闪烁(抖动)的解决办法
“不能执行已释放的Script代码”错误的原因及解决办法
javascript下过滤数组重复值的代码
javascript在firefox下设为首页的代码
一直都需要的复制到系统剪贴板之IE,firefox兼容版
js类中获取外部函数名的方法与代码
JS类定义原型方法的两种实现的区别评论很多
一实用的实现table排序的Javascript类库

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 143 ::
收藏到网摘: n/a

<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,感觉比较巧妙。