js查找父节点的简单方法


<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==parent){return i;}
if(n==document.documentElement){return -1;} //找不到目标父节点,防止死循环
}
}
函数的返回值是索引数字,如果入口节点与查找的父节点相同(即同一个元素),返回值为0,向上循环找到父节点后返回向上查找的节点级数,如果向上查找,到了整个页面的根节点,比如是<html>,还找不到,就返回-1,并结束循环。

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



相关阅读:
vb.net入门——Splitter 控件的使用
asp事务处理
WML,Apache,和 PHP 的介绍
javascript对象与数组参考大全(4)
无刷新的聊天室的制作兼谈组件制作和ClientSide Script(一)
css对边框的属性控制和链接的伪类选择器
Webjx推荐15个好的CSS网格布局生成器
ASP.NET自定义控件 带有自定义样式的星级控件
CSS仿淘宝首页导航条按钮布局效果
CSS实现表格单元格强制换行和强制不换行
php与XML、XSLT、Mysql的结合三
JSP连接Mysql数据库
3.2 Oracle大文本在ASP中存取问题的解决
CSS初学者常犯错误汇总
快速导航

Copyright © 2016 phpStudy | 皖ICP备18014864号-4