Child&ElementChild
关于firstChild&firstElementChild及其同类属性使用,同时分析不同浏览器下child的包含的节点差异
<head>
<meta charset="UTF-8">
<title></title>
<script>
window.onload = function (){
/*本例中所有属性均为只读属性*/
var oBox = document.getElementById('box');
var oText = document.getElementById('text'); oText.innerHTML += '子元素节点统计:<br/>'+oBox.childNodes.length+'<br/><br/>';
alert(oBox.childNodes.length);
/*标准:包含文本和元素节点,*同时'包含'非法嵌套节点,如p标签,此处显示 11,共计11个节点*/
/*非标准:只包含元素节点,*同时'包含'非法嵌套节点,且视为独立节点,在下文的'lastChild.previousSibling'会体现*/
/*IE7以下'不包含'非法节点,如p标签,将非法节点与它前面的合法节点捆绑,视为一个节点,在下文的lastChild中会体现*/ oText.innerHTML += '选定的子元素节点类型:<br/>'+oBox.childNodes[0].nodeType+'<br/><br/>';
alert(oBox.childNodes[0].nodeType);/*获取读取到的元素的节点类型*/
/*
* 常用的三种节点类型
* 元素节点:1
* 属性节点:2
* 文本节点:3
*/
oText.innerHTML += '第一个子节点:<br/>'+oBox.firstChild+'<br/>'+oBox.firstChild.innerHTML+'<br/><br/>';
alert(oBox.firstChild);
/*IE7以下 显示 object*/
/*标准浏览器 显示 object Text*/
alert(oBox.firstChild.innerHTML);
/*IE7以下 显示 111*/
/*标准浏览器 显示 undefined*//*因为是文本节点*/ oText.innerHTML += '最后一个子节点:<br/>'+oBox.lastChild+'<br/>'+oBox.lastChild.innerHTML+'<br/><br/>';
alert(oBox.lastChild);
/*IE7以下 显示 object*/
/*标准浏览器 显示 object Text*/
alert(oBox.lastChild.innerHTML);
/*IE7以下 显示
* 444
* <p>555</p>
*/
/*标准浏览器 显示 undefined*//*同样是文本节点*/ oText.innerHTML += '第一个子节点 的 后一个兄弟节点:<br/>'+oBox.firstChild.nextSibling+'<br/>'+oBox.firstChild.nextSibling.innerHTML+'<br/><br/>';
/*元素的第一个子节点的后一个兄弟节点*/
alert(oBox.firstChild.nextSibling);
/*IE7&8以下 显示 object*/
/*标准浏览器 显示 object HTMLLiElement*/
alert(oBox.firstChild.nextSibling.innerHTML);
/*IE7&8以下 显示 222*/
/*标准浏览器 显示 111*/ oText.innerHTML += '最后一个子节点 的 前一个兄弟节点:<br/>'+oBox.lastChild.previousSibling+'<br/>'+oBox.lastChild.previousSibling.innerHTML+'<br/><br/>';
/*元素的最后一个子节点的前一个兄弟节点*/
alert(oBox.lastChild.previousSibling);
/*IE7以下 显示 object*/
/*IE8 显示 object HTMLLiElement*/
/*标准浏览器 显示 object HTMLParagraphElement*/
alert(oBox.lastChild.previousSibling.innerHTML);
/*IE7以下 显示 333*/
/*IE8 显示 444*/
/*标准浏览器 显示 555*//*此处分析,标准浏览器同样将非法节点视为独立节点*/
/*此处可以看出,对于child
* IE7以下 不包含文本节点,并且相较于IE8,将非法节点与其前面的合法节点捆绑,视为一个节点
* IE8下 不包含文本节点,相较于IE7以下,包含非法节点,并且视非法节点为独立的节点
* 标准浏览器下包含所有节点,如文本及元素等
* */
};
</script>
</head>
<body>
<ul id="box">
<li>111</li>
<li>222</li>
<li>333</li>
<li>444</li>
<p>555</p>
</ul>
<div id="text"></div>
</body>
标准浏览器显示:
子元素节点统计:
11
选定的子元素节点类型:
3
第一个子节点:
[object Text]
undefined
最后一个子节点:
[object Text]
undefined
第一个子节点 的 后一个兄弟节点:
[object HTMLLIElement]
111
最后一个子节点 的 前一个兄弟节点:
[object HTMLParagraphElement]
555
////////////////////////////////////////////////////////////////
IE8显示:
子元素节点统计:
5
选定的子元素节点类型:
1
第一个子节点:
[object
HTMLLIElement]
111
最后一个子节点:
[object
HTMLParagraphElement]
555
第一个子节点 的 后一个兄弟节点:
[object
HTMLLIElement]
222
最后一个子节点 的 前一个兄弟节点:
[object
HTMLLIElement]
444
//////////////////////////////////////////////////////////////////
IE7以下显示
4
选定的子元素节点类型:
1
第一个子节点:
[object]
111
最后一个子节点:
[object]
444
555
第一个子节点 的 后一个兄弟节点:
[object]
222
最后一个子节点 的
前一个兄弟节点:
[object]
333
function zcyFirstChild(){
/*标准浏览器下,ElementChild为真,返回此属性,非标准下为假,返回Child*/
var oFirst = oBox.firstElementChild||oBox.firstChild;
return oFirst;
};
alert(zcyFirstChild().innerHTML);
此方法正常情况可以解决兼容问题,但是如果元素中没有子元素时浏览器会报错
此时可以使用 children 进行子元素获取,此属性只获取元素类节点,不包含文本节点等,但是非法嵌套的差异依旧存在
<head>
<meta charset="UTF-8">
<title></title>
<script>
window.onload = function (){
/*本例中所有属性均为只读属性*/
var oBox = document.getElementById('box');
var oText = document.getElementById('text'); if( oBox.children[0] ){
oBox.children[0].style.background = 'red';
}else{
alert(1);
}
};
</script>
</head>
<body>
<ul id="box">
</ul>
<div id="text"></div>
</body>
Child&ElementChild的更多相关文章
- MapReduce剖析笔记之七:Child子进程处理Map和Reduce任务的主要流程
在上一节我们分析了TaskTracker如何对JobTracker分配过来的任务进行初始化,并创建各类JVM启动所需的信息,最终创建JVM的整个过程,本节我们继续来看,JVM启动后,执行的是Child ...
- [翻译]AKKA笔记 - CHILD ACTORS与ACTORPATH -6
原文:http://rerun.me/2014/10/21/akka-notes-child-actors-and-path/ Actor是完全的继承结构.你创建的任何Actor肯定都是一个其他Act ...
- php php-5.6.4.tar.bz2 apache 兼容问题 child pid 27858 exit signal Segmentation fault
环境 [root envirotar]# uname -a Linux i2..el6.x86_64 # SMP Thu Jul :: UTC x86_64 x86_64 x86_64 GNU/Lin ...
- [ASP.NET MVC 小牛之路]12 - Section、Partial View 和 Child Action
概括的讲,View中的内容可以分为静态和动态两部分.静态内容一般是html元素,而动态内容指的是在应用程序运行的时候动态创建的内容.给View添加动态内容的方式可归纳为下面几种: Inline cod ...
- 调用Child Package
使用Execute Package Task,能够在一个package中调用并执行其他package,被调用的Package称作 Child Package,Execute Package Task ...
- ORA-02292: integrity constraint (xxxx) violated - child record found
在更新表的主键字段或DELETE数据时,如果遇到ORA-02292: integrity constraint (xxxx) violated - child record found 这个是因为主外 ...
- Child <- many-to-one ->Parent
网上找到个描述的很精妙的例子 Child <- many-to-one ->Parent class Child { private ...
- [NHibernate]Parent/Child
系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernate ...
- ScrollView can host only one direct child
Android 采用ScrollView布局时出现异常:ScrollView can host only one direct child. 异常原因: 主要是ScrollView内部只能有一个子元素 ...
随机推荐
- Bzoj 2456: mode 数论,众数
2456: mode Time Limit: 1 Sec Memory Limit: 1 MBSubmit: 2843 Solved: 1202[Submit][Status][Discuss] ...
- [Ruby on Rails Issue] When Setting Sqlite version on the Gemfile, Show error "An error occurred while installing sqlite3 ",
Issue: Gem files will remain installed in /tmp/bundler20140825-31835-p0c0p/sqlite3-1.3.9/gems/sqlite ...
- XPath在asp.net中查询XML -摘自网络
.NET Framework 2.0中可以使用System.Xml.XPath命名空间下的类对XML文档进行基于路径的查询,在查询过程中需要构造类似SQL的查询字符串,该字符串遵循XPath语法.它由 ...
- Java StringTokenizer Example
In Java, you can use StringTokennizer class to split a String into different tokenas by defined deli ...
- Android studio开发常用快捷键
最常用快捷键 1.Ctrl+E 可以显示最近编辑的文件列表 2.Shift+Click(点击) 可以关闭文件 3.Ctrl+[或者ctrl+] 可以跳到大括号的开头结尾 4.Ctrl+Shift ...
- Android学习(一)
#常见布局 ###线性布局 有一个布局方向,水平或者竖直 在竖直布局下,左对齐.右对齐,水平居中生效 在水平布局下,顶部对齐.底部对齐.竖直居中生效 权重:按比例分配屏幕的剩余宽度或者高度 ###相对 ...
- Quartz定时任务学习(九)Quartz监听器
Quartz 提供了三种类型的监听器:监听 Job 的,监听 Trigger 的,和监听 Scheduler 自已的. 本章解释如何应用每一种类型来更好的管理你的 Quartz 应用,并获悉到什么事件 ...
- 20169210《Linux内核原理与分析》第四周作业
网易云课堂学习: 在实验楼的学习中,这次的实验是利用mykernel实验模拟计算机硬件平台 首先进入linux-3.9.4, $cd LinuxKernel/linux-3.9.4 如下图所示 接下来 ...
- 介绍几种大型的Oracle/SQL Server数据库免费版
我们知道,Oracle和SQL Server等大型数据库也都存在一些免费的版本,这些免费的版本已经能够满足许多中小项目的需求.对于在校大学生来说,从学习的目标上来讲,安装免费版的大型数据库也就足够用了 ...
- MFC 一个类訪问还有一个类成员对象的成员变量值
作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/35263857 MFC中一个类要訪问另外一个类的的对象的成员变量值,这就须要获得 ...