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内部只能有一个子元素 ...
随机推荐
- Parallels Desktop 7用bootcamp安装win7 后如何激活WIN7
在parallels的选项中,在硬件选项卡的引导标记中添加:kernel.waet.enable=0 ,重新启动win7即可激活.
- Bzoj 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 二分
1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1272 Solve ...
- Delphi的四舍五入函数
一.四舍五入法 四舍五入是一种应用非常广泛的近似计算方法,其有算术舍入法和银行家舍入法两种. 所谓算术舍入法,就是我们通常意义上的四舍五入法.其规则是:当舍去位的数值大于等于5时,在舍去该 ...
- Implement the hash table using array / binary search tree
今天在复习Arrays and String 时看到一个很有趣的问题.希望跟大家分享一下. Implement the hash table using array / binary search t ...
- openstack liberty 版本按照官方文档手动整合 完成后 基于dashboard-horizon 创建虚拟机报错 用CL却是成功的 网络等验证都是正确的通过启动的虚拟实例测试以成功
- Javascript之<script>标签
把javascript代码插入到HTML页面中需要使用<script>标签,使用这个元素可以使javascript和html标记混合在一个页面中,也可以引入外部的javascript文件. ...
- spf13配置问题
git clone https://github.com/spf13/spf13-vim.git tab是黑的色 加入这样一行就可以了set nolist if下的黑边在~/.vimrc里面吧inde ...
- iOS性能优化中的离屏渲染
GPU屏幕渲染有以下两种方式: On-Screen Rendering意为当前屏幕渲染,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行. Off-Screen Rendering意为离屏渲染 ...
- JSTL 数字日期标签库
<frm:formatNumber/>标签 该标签依据特定的区域将数字改变为不同的格式来显示. 被格式化的数据<frm:formatNumber> <fmt:format ...
- Chapter 4 - How to Fire some Bullets
Now, we want to let the hero fire some bullets to kill the enemies, add the codes below to set the l ...