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 相关文章推荐
javascript instanceof,typeof的区别
Mar 24 Javascript
wap浏览自动跳转到wap页面的js代码
May 17 Javascript
什么是MEAN?JavaScript编程中的MEAN是什么意思?
Dec 18 Javascript
JavaScript动态改变div属性的实现方法
Jul 22 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
Aug 24 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
Nov 16 Javascript
angular.extend方法的具体使用
Sep 14 Javascript
AngularJS与后端php的数据交互方法
Aug 13 Javascript
vue+moment实现倒计时效果
Aug 26 Javascript
关于vue表单提交防双/多击的例子
Oct 31 Javascript
vue键盘事件点击事件加native操作
Jul 27 Javascript
JS数组的常用方法整理
Mar 31 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
php的POSIX 函数以及进程测试的深入分析
2013/06/03 PHP
php中Y2K38的漏洞解决方法实例分析
2014/09/22 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
jquery中的$(document).ready()与window.onload的区别
2009/11/18 Javascript
几个有趣的Javascript Hack
2010/07/24 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
JavaScript数组方法总结分析
2016/05/06 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
2017/09/19 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
2018/04/17 Javascript
vue-cli项目中使用echarts图表实例
2018/10/22 Javascript
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
2019/10/26 jQuery
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
2020/06/24 Javascript
vue实现虚拟列表功能的代码
2020/07/28 Javascript
[51:29]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第一场 11.05
2020/11/05 DOTA
如何运行Python程序的方法
2013/04/21 Python
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
python使用mailbox打印电子邮件的方法
2015/04/30 Python
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
2019/06/18 Python
Python 旋转打印各种矩形的方法
2019/07/09 Python
python实现数据分析与建模
2019/07/11 Python
自学python用什么系统好
2020/06/23 Python
django模型类中,null=True,blank=True用法说明
2020/07/09 Python
idea2020手动安装python插件的实现方法
2020/07/17 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
浅谈h5自定义audio(问题及解决)
2016/08/19 HTML / CSS
ALDO加拿大官网:加拿大女鞋品牌
2018/12/22 全球购物
大学生毕业自我鉴定范文
2013/11/03 职场文书
财务信息服务专业自荐书范文
2014/02/08 职场文书
《油菜花开了》教学反思
2014/02/22 职场文书
财务部总监岗位职责
2014/03/12 职场文书
说明书范文
2014/05/07 职场文书
小学五一劳动节活动总结
2015/02/09 职场文书