javascript中parentNode,childNodes,children的应用详解


Posted in Javascript onDecember 17, 2013

"parentNode"

常用来获取某个元素的父节点. 把 parentNodes 理解为容器, 在容器中有个子节点    

例:
<div id="parent">
<b id="child">My text</b>
</div>

在上面的代码中, 你看到把"爹"作为一个 div 容器, 该容器中有个"孩子", 就是粗体的文字部分. 如果你打算用getElementById() 方法获取粗体元素并且想知道它"爹"是谁, 返回的信息将是一个 div. 演示下面的脚本, 你就知道是怎么回事啦 ...

引用:

<div id="parent">
<b id="child">My text</b>
</div>
<script type="text/javascript">
<!--
alert(document.getElementById("child").parentNode.nodeName);
//-->
</script>

用 parentNode 不一定只找到一个"爹", "儿子"也可以成为"爹", 如下面的例子 ...

引用:

<div id="parent">
         <div id="childparent">
           <b id="child">My text</b>
         </div>
</div>

上面这段代码中有两个"爹"和两个"孩子". 头一个 div ( id "parent") 是第二个 div (childparent) 的"爹".          
在 "childparent" 中有个粗体元素(id "child"), 是 "childparent" div 的"孩子". 那么, 如何访问到"爷爷" (id "parent")? 很简单 ....

引用:

<div id="parent">
          <div id="childparent">
             <b id="child">My text</b>
          </div>
</div>
<script type="text/javascript">
<!--
alert(document.getElementById("child").parentNode.parentNode.nodeName);
//-->
</script>

注意到两个 parentNode 连用了吗? "parentNode.parentNode". 第一个 parentNode 是 div ( id "childparent"), 因为我们要得到最外层的父元素, 所以另外加了一个 parentNode 就到了 div ( id "parent").
使用 parentNode 不只找到某个元素的 nodeName, 还会更多. 例如, 你可以获取包含大量元素的父节点, 并在末尾添加一个新的节点.
IE 有它自己的名称叫做 "parentElement", 对于交叉浏览器脚本建议使用 parentNode.

再??铝骄?
如果将 javascript 放在 html文件头部, 会发生错误. Firefox 会有如下报错:

document.getElementById("child") has no properties

而 IE 则是:

Object Required

原因是所有的支持 javascript 的浏览器在完全解析 DOM 之前运行 javascript . 在实际在 Web 编程中,可能会将大多数 javascript 放在 head 标签中. 为了能够正常运行, 需要在函数中包裹 alert , 在文档加载后调用函数. 例如在 Body 标签中加入 .

parentNode、parentElement,childNodes、children 它们有什么区别呢?
parentElement 获取对象层次中的父对象。
parentNode 获取文档层次中的父对象。
childNodes 获取作为指定对象直接后代的 HTML 元素和 TextNode 对象的集合。
children 获取作为对象直接后代的 DHTML 对象的集合。

--------------------------------------------------------

parentNode和parentElement功能一样,childNodes和children功能一样。但是parentNode和childNodes是符合W3C标准的,可以说比较通用。而另外两个只是IE支持,不是标准,Firefox就不支持

--------------------------------------------------------

也就是说parentElement、children是IE自家的东西,别的地方是不认的。
那么,他们的标准版就是parentNode,childNodes。
这两个的作用和parentElement、children是一样的,并且是标准的、通用的。

--------------------------------------------------------

以下是简单的解释,注意个别字的差异:
parentNode Property: Retrieves the parent object in the document hierarchy.

parentElement Property:Retrieves the parent object in the object hierarchy.

childNodes:
Retrieves a collection of HTML Elements and TextNode objects that are direct descendants of the specified object.

children:
Retrieves a collection of DHTML Objects that are direct descendants of the object.

parentElement parentNode.parentNode.childNodes用法例子

第一种方法

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" C>
<META NAME="Author" C>
<META NAME="Keywords" C>
<META NAME="Description" C>
<SCRIPT LANGUAGE="JavaScript">
<!--
var row = -1;
function showEdit(obj){
var cell2 = obj.parentNode.parentNode.childNodes[1];
var rowIndex = obj.parentNode.parentNode.rowIndex;
cell2.innerHTML = "<input type='text' value='"+ cell2.innerHTML +"'>";
if(row != -1){
var oldCell2 = document.getElementById("tb").rows[row].cells[1];
oldCell2.innerHTML = oldCell2.childNodes[0].value;
}
row = rowIndex;
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<TABLE id="tb">
<TR>
<TD><input type="radio" name="rad"></TD>
<TD></TD>
<TD></TD>
</TR>
<TR>
<TD><input type="radio" name="rad"></TD>
<TD></TD>
<TD></TD>
</TR>
<TR>
<TD><input type="radio" name="rad"></TD>
<TD></TD>
<TD></TD>
</TR>
</TABLE>
</BODY>
</HTML>

第二种方法
<table border=1 width=100%>
<tr>
    <td><input name=m type=checkbox ></td>
    <td>1111</td>
    <td><input name=aaa value="222" disabled></td>
    <td><input name=bbb value="333" disabled></td>
</tr>
<tr>
    <td><input name=m type=checkbox ></td>
    <td>1111</td>
    <td><input name=aaa value="222" disabled></td>
    <td><input name=bbb value="333" disabled></td>
</tr>
<tr>
    <td><input name=m type=checkbox ></td>
    <td>1111</td>
    <td><input name=aaa value="222" disabled></td>
    <td><input name=bbb value="333" disabled></td>
</tr>
</table>
<SCRIPT LANGUAGE="JavaScript">
function mm(e)
{
var currentTr=e.parentElement.parentElement;
var inputObjs=currentTr.getElementsByTagName("input");
for(var i=0;i<inputObjs.length;i++)
{
   if(inputObjs[i ]==e) continue;
    inputObjs[i ].disabled=!e.checked;
}
}
</SCRIPT>

获取HTML中的父控件方法
function setvalue(v,o)
    { 
        //var obj=document.getElementById(''batchRate'');
        //windows.
        alert(o.parentNode.innerHTML);
        alert(o.parentNode); //parentNode此处也是获取父控件
        alert(o.parentElement); //parentElement此处也是获取父控件
        alert(o.parentElement.parentNode); //parentElement.parentNode此处也是获取父控件
        //o.parentNode.bgColor="red";
         o.parentElement.parentNode.bgColor="red";
    }

实例:
<html>
<head>
<meta http-equiv="Content-Language" c>
<meta http-equiv="Content-Type" c>
<title>新建网页 1</title>
</head>
<script>
    function setvalue(v,o)
    { 
        //var obj=document.getElementById(''batchRate'');
        //windows.
        alert(o.parentNode.innerHTML);
        alert(o.parentNode);
        alert(o.parentElement);
        //o.parentNode.bgColor="red";
       o.parentElement.parentNode.bgColor="red";
    }
</script>
<body>
<table border="1" width="100%" id="table1">
<tr>
<td width="250"><a >dfsdfdsfdsa</a></td>
<td> </td>
<td> </td>
</tr>
Javascript 相关文章推荐
使用TextRange获取输入框中光标的位置的代码
Mar 08 Javascript
jquery简单实现滚动条下拉DIV固定在头部不动
Nov 25 Javascript
Node.js实现批量去除BOM文件头
Dec 20 Javascript
jQuery Ajax调用WCF服务详细教程
Mar 31 Javascript
JavaScript设计模式之单体模式全面解析
Sep 09 Javascript
MUI 实现侧滑菜单及其主体部分上下滑动的方法
Jan 25 Javascript
vue2.0学习之axios的封装与vuex介绍
May 28 Javascript
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
Jun 13 Javascript
jQuery实现鼠标移入移出事件切换功能示例
Sep 06 jQuery
es6数据变更同步到视图层的方法
Mar 04 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
Jun 18 Javascript
JavaScript实现简易计算器小功能
Oct 22 Javascript
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
Dec 17 #Javascript
JS关闭窗口与JS关闭页面的几种方法小结
Dec 17 #Javascript
不提示直接关闭网页窗口的JS示例代码
Dec 17 #Javascript
js实现倒计时时钟的示例代码
Dec 17 #Javascript
B/S模式项目中常用的javascript汇总
Dec 17 #Javascript
动态加载dtree.js树treeview(示例代码)
Dec 17 #Javascript
Jquery uploadify图片上传插件无法上传的解决方法
Dec 16 #Javascript
You might like
用PHPdig打造属于你自己的Google[图文教程]
2007/02/14 PHP
PHP定时执行任务实现方法详解(Timer)
2015/07/30 PHP
Yii数据读取与跳转参数传递用法实例分析
2016/07/12 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
PHP时间函数使用详解
2019/03/21 PHP
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
javascript 二进制运算技巧解析
2012/11/27 Javascript
使用C++为node.js写扩展模块
2015/04/22 Javascript
javascript比较两个日期相差天数的方法
2015/07/24 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
利用VUE框架,实现列表分页功能示例代码
2017/01/12 Javascript
JavaScript函数基础详解
2017/02/03 Javascript
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
简单分析js中的this的原理
2019/08/31 Javascript
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
2020/07/22 Javascript
[55:56]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
在Python中处理字符串之ljust()方法的使用简介
2015/05/19 Python
Python实现文件按照日期命名的方法
2015/07/09 Python
Python实现的选择排序算法原理与用法实例分析
2017/11/22 Python
python matplotlib实现双Y轴的实例
2019/02/12 Python
python实现最大子序和(分治+动态规划)
2019/07/05 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
2019/12/03 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
2020/03/20 Python
Python sorted排序方法如何实现
2020/03/31 Python
vscode写python时的代码错误提醒和自动格式化的方法
2020/05/07 Python
利用CSS3实现的文字定时向上滚动
2016/08/29 HTML / CSS
css3进阶之less实现星空动画的示例代码
2019/09/10 HTML / CSS
蒂娜商店:Tiina the Store
2019/12/07 全球购物
CHARLES & KEITH加拿大官网:新加坡时尚品牌
2020/03/26 全球购物
护士思想汇报
2014/01/12 职场文书
社区安全生产月活动总结
2014/07/05 职场文书
2015中学教师个人工作总结
2015/07/22 职场文书
2016年机关单位节能宣传周活动总结
2016/04/05 职场文书