IE10、Chrome与nextSibling
记录学习JavaScript中遇到的知识点
1、在使用nextSibling获取ul下三个li标签中第二个节点Id时,发现IE10、Chrome均不忽略换行、空格及Tab键。
![](/assets/blank.gif)
![](/assets/blank.gif)
<!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>
View Code
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键。
![](/assets/blank.gif)
![](/assets/blank.gif)
<script tyoe="text/JavaScript"> //获取节点IDfunction 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>
View Code
ie10、Chrome中运行结果均为:item2,undefined。函数getNextNode(node)按意愿实现正确获取了"item1"的下一个Element节点,网络说法是(本人未测试):IE8.0及其以下版本的浏览器会忽略节点间的空白节点,遵循W3C规范的浏览器(Chrome、FireFox、Safari等)则会把这些空白作为文本节点处理。
转载于:https://www.cnblogs.com/rellay/p/5228850.html
IE10、Chrome与nextSibling相关推荐
- [转]抛弃jQuery,使用原生JavaScript
原文链接 Document Ready 事件 在jQuery中,document.ready可以让代码在整个文档加载完毕之后执行: $(document).ready(function() {// C ...
- 抛弃jQuery 深入原生的JavaScript
虽然我已经做网站建设工作10多年了,但我从最近3年才开始更多地学习如何更好的将纯JavaScript用于工作中,而不总是将jQuery考虑在第一位.现在我每天学习很多东西.这个过程让我觉得Adtile ...
- 抛弃jQuery,深入原生的JavaScript
虽然我已经做网站建设工作10多年了,但我从最近3年才开始更多地学习如何更好的将纯JavaScript用于工作中,而不总是将jQuery考虑在第一位.现在我每天学习很多东西.这个过程让我觉得Adtile ...
- JS滚轮事件(mousewheel/DOMMouseScroll)了解
by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.com/wordpress/?p=3175 一.学无止境 ...
- 石川es6课程---1-2、ES6简介
石川es6课程---1-2.ES6简介 一.总结 一句话总结: 从ECMAScript的历史发展来看,太顺了的时候总会遇到一挫折,比如ecma4 1.ECMAScript 和 JavaScript关系 ...
- 前端工程师的知识体系
前端开发的核心是HTML + CSS + JavaScript.本质上它们构成一个MVC框架,即HTML作为信息模型(Model),CSS控制样式(View),JavaScript负责调度数据和实现某 ...
- 那些原生JavaScript
最近在用mui写页面,当然了在移动App里引入jq或zepto这些框架,肯定是极不理性的. 原生JS挺简单,为何需要jq? jq的成功当时是因为ie6.7.8.9.10.chrome.ff这些浏览器不 ...
- 用PHP和Websocket实现实时通讯
说到websocket大家一定不会陌生,WebSocket是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex).一开始的握手需要借助HTTP请求完成,当浏览器和服务器握 ...
- 【初学者必读】:前端工程师的知识体系
下图是前端工程师图解: 前端开发的核心是HTML + CSS + JavaScript.本质上它们构成一个MVC框架,即HTML作为信息模型(Model),CSS控制样式(View),JavaScri ...
最新文章
- 软件项目第一次Sprint评分表
- 修改hostname
- jQuery中选择器加尖括号的区别
- .NET网络编程学习(三)
- 借钱年利息15%,借款人将房产证抵押并公证,有无风险?
- linux服务器时间不同步解决方法
- mysql数据库复制功能配置,最详细的mysql数据库主从复制功能配置教程(docker版本)...
- UVALive3905 流星
- 【SPS2010】现在的这个版本不值得测试。
- 关于var、let和const
- 基于xxx的系统实现
- 系统分析与设计期末复习题目
- 《代码大全2》第3章 三思而后行,前期准备
- 力扣1438——绝对差不超过限制的最长连续子数组(滑动窗口+单调队列)
- CMDB开发之用户登录登出的cookie校验
- python中offset_python pandas tseries.offsets.DateOffset用法及代码示例
- 菜鸟窝大数据课程(免费试听):Linux基础课程
- 互联网行业常见数据分类:用户数据、行为数据、业务数据
- ieee计算机论文格式,[计算机]小论文撰写格式.doc
- CW聚类算法原理 -- 译自《Chinese Whispers》论文
热门文章
- 平行志愿计算机录取顺序,平行志愿与顺序志愿分别是什么?
- php第一章:1.网络知识简介:IP、DNS、端口
- Nginx+Tomcat构筑Web服务器集群
- 抽取原理的案例_短实体,长句实体抽取
- linux parted新建分区表,新增存储用Parted分区并建LVM卷
- Android重新分区parted,parted分区以及格式化方法(示例代码)
- latex error: does not look like a valid PDF document ; xdvipdfmx:fatal: Out of memory - asked for ..
- python自学入门12周_新手怎么100天入门Python?
- ping traceroute原理
- Java语言的十大特性