IE10、Chrome与nextSibling

记录学习JavaScript中遇到的知识点

1、在使用nextSibling获取ul下三个li标签中第二个节点Id时,发现IE10、Chrome均不忽略换行、空格及Tab键。

<!DOCTYPE html>
<html>
    <head>
    <meta charset="utf-8">
    <title>JavaScript Exercises.</title>
    </head>
    <body>
        <h1>This is my first exercise.</h1>
        <ul>
            <li id="item1">item1</li>
            <li id="item2">item2</li>
            <li id="item3">item3</li>
        </ul>
    </body>
</html>
<script tyoe="text/JavaScript">
    var nodeItem=document.getElementById("item1");
    alert(nodeItem.id);
    alert(nodeItem.nextSibling.nodeType);
    alert(document.getElementsByTagName("ul")[0].childNodes.length);
</script>

ie10、Chrome中运行结果均为:item1,3,7。即("item1").nextSibling.nodeType=3为文本类型节点,也就是没有忽略节点"item1"后面的空文本节点(空格、回车和Tab键)。<ul></ul>标签内共有4个换行,3个<li></li>节点,共7个。

然后将<ul></ul>标签内的换行删除,ie10、Chrome中运行结果则为:item1,1,3。

2、现在改变策略使用函数getNextNode(node)来获取下一个Element节点,以达到忽略换行、空格及Tab键。

<script tyoe="text/JavaScript">
//获取节点ID
    function getNextNode(node){
        node=typeof node=="string" ? document.getElementById(node):node;
        var nextNode=node.nextSibling;
        if(!nextNode)
            return null;
        while(true){
            //访问到下一个Element节点
            if(nextNode.nodeType==1){
                break;
            }
            else{
                //访问到非Element类型节点
                if(nextNode.nextSibling){
                    nextNode=nextNode.nextSibling;
                }
                else{
                    break;
                }
            }
        }
        return nextNode;
    }
    var nextNode=getNextNode("item1");
    alert(nextNode.id);

    var nodeItem=document.getElementById("item1");
    alert(nodeItem.nextSibling.id);
</script>

ie10、Chrome中运行结果均为:item2,undefined。函数getNextNode(node)按意愿实现正确获取了"item1"的下一个Element节点,网络说法是(本人未测试):IE8.0及其以下版本的浏览器会忽略节点间的空白节点,遵循W3C规范的浏览器(Chrome、FireFox、Safari等)则会把这些空白作为文本节点处理。

时间: 2024-12-24 04:52:08

IE10、Chrome与nextSibling的相关文章

javascript前端实现base64图片下载(兼容IE10+,chrome,firefox)

 不是不兼容ie,就是不兼容ff,费了很多时间感谢原作者. 背景 在项目开发过程中,经常会有图片导出的需求,尤其是带有图表类的应用,通常需要将图表下载导出. 在chrome等新版浏览器中实现base64图片的下载还是比较容易的: 创建一个a标签 将a标签的href属性赋值为图片的base64编码 指定a标签的download属性,作为下载文件的名称 触发a标签的点击事件 但是这套逻辑在IE下是不行的,这样写会直接报错. 所以IE下需要单独处理,这里IE在处理这种文件的时候给提供了一个单独的方法:

抛弃jQuery 深入原生的JavaScript

学习如何更好的将纯JavaScript用于工作中,而不总是将jQuery考虑在第一位.现在我每天学习很多东西.这个过程让我觉得Adtile的JavaScript SDK 更像是在创建一个开源工程,而不是"具体的工作",不得不说,我很喜欢那样. 今天,我准备将在过去几年学到的一些基础东西与大家一起分享,这将可能帮你深入纯 JavaScript的世界,让你能更简单的做出决定--jQuery在你下个工程中是否需要. 逐步增强 虽然像jQuery这样的库有助于解决许多浏览器之间不兼容的问题,但

抛弃jQuery,深入原生的JavaScript

虽然我已经做网站建设工作10多年了,但我从最近3年才开始更多地学习如何更好的将纯JavaScript用于工作中,而不总是将jQuery考虑在第一位.现在我每天学习很多东西.这个过程让我觉得Adtile的JavaScript SDK 更像是在创建一个开源工程,而不是"具体的工作",不得不说,我很喜欢那样. 今天,我准备将在过去几年学到的一些基础东西与大家一起分享,这将可能帮你深入纯 JavaScript的世界,让你能更简单的做出决定--jQuery在你下个工程中是否需要. 逐步增强 虽然

window.requestAnimationFrame() ,做逐帧动画,你值得拥有

window.requestAnimationFrame() 方法告诉浏览器您希望执行动画,并请求浏览器调用指定的函数在下一次重绘之前更新动画.该方法使用一个回调函数作为参数,这个回调函数会在浏览器重绘之前调用. 如果你想做逐帧动画的时候,你应该用这个方法.这就要求你的动画函数执行会先于浏览器重绘动作.通常来说,被调用的频率是每秒60次,但是一般会遵循W3C标准规定的频率.如果是后台标签页面,重绘频率则会大大降低. 基本语法: requestID = window.requestAnimatio

mui项目中如何使用原生JavaScript代替jquery来操作dom

转载于:http://www.bcty365.com/content-146-3661-1.html 最近在用mui写页面,当然了在移动App里引入jq或zepto这些框架,肯定是极不理性的.原生JS挺简单,为何需要jq?jq的成功当时是因为ie6.7.8.9.10.chrome.ff这些浏览器不兼容,让开发者崩溃,而且pc上浏览器性能好,跨平台兼容也不影响性能.但jq根本就不是为手机设计的.手机上只有webkit浏览器(忽略wp,反正mui不支持wp),根本就不需要jq这种封装框架来操作dom

用PHP 和Websocket实现实时通讯---GoEasy

说到websocket大家一定不会陌生,WebSocket是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex).一开始的握手需要借助HTTP请求完成,当浏览器和服务器握手成功后,浏览器和服务器之间就形成了一条快速通道.两者之间就直接可以数据互相传送.有了websocket, 大家就可以摒弃以往用轮询来实现实时通讯的方式了. 有了websocket后,应运而生的相关产品也不在少数,选择也成了最大的问题,在这里你可能会说"干嘛用别人的,我可以自己用原始的开发一个啊&q

用JAVA和Websocket实现实时通讯

说到websocket大家一定不会陌生,WebSocket是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex).一开始的握手需要借助HTTP请求完成,当浏览器和服务器握手成功后,浏览器和服务器之间就形成了一条快速通道.两者之间就直接可以数据互相传送.有了websocket, 大家就可以摒弃以往用轮询来实现实时通讯的方式了. 有了websocket后,应运而生的相关产品也不在少数,选择也成了最大的问题,在这里你可能会说"干嘛用别人的,我可以自己用原始的开发一个啊&q

转载 前端基础知识体系 一个新手的学习之路

原帖地址:  转载的原因是我学习前端和php已经4个多月了.看看自己还有那些不足.自己得努力学习,牛人太多.红色是我会的,或者学过的.希望今天把大部分飘红. 一.HTML 标签的分类 标签表示一个元素 按性质划分: Block-Level和Inline-Level 按语义划分: Headings: h1, h2, h3, h4, h5, h6 Paragraphs: p Text Formatting: em, strong, sub, del, ins, small Lists: ul, li

前端知识体系及修炼

前端开发的核心是HTML + CSS + JavaScript.本质上它们构成一个MVC框架,即HTML作为信息模型(Model),CSS控制样式(View),JavaScript负责调度数据和实现某种展现逻辑(Controller). HTML 1. 标签的分类 1. 标签表示一个元素 2. 按性质划分: Block-Level和Inline-Level 3. 按语义划分: Headings: h1, h2, h3, h4, h5, h6 Paragraphs: p Text Formatti