JavaScript中的nextSiblingpreviousSibling和作用类似于jquery的next()和prev(),都是获取下一个/上一个同胞元素,如果下一个同级节点不存在,则此属性返回值是null。但是具体的使用中还是有差异的,如果注意。就会引起错误

html结构中的各种空格,换行符都可能会把文本节点当做同胞元素处理。这就会导致错误。

例如下面代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script>
window.onload = function() {
var nextType = document.getElementById('one').nextSibling;
alert(nextType.nodeType);
}
</script>
</head>
<body>
<div id="div">
<p id = "one">我是p</p>
<span id="two">我是span</span>
</div>
</body>
</html>

在上面这段代码中,我获取了id为"one"的元素并用nextSibling获取了他的下一个同胞元素。赋值给了变量nextType

   var nextType = document.getElementById('one').nextSibling;

  并使用

  alert(nextType.nodeType);

弹出他的节点类型,如果按常理,元素p下一个相邻的同胞元素为是span,弹出的数字应该为“1”,但我再火狐,谷歌,IE浏览器(网上说只有火狐才会把换行,空格当做文本节点处理,但是我测试谷歌,IE浏览器效果都是一样的,这有点不解)打开后,弹出的数字是3,

也就是文本节点。这是因为换行符被当做文本节点来处理,成为了p元素的下一个同胞元素。

如果我要获取我是span的文本值,需要这样写

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script>
window.onload = function() {
var nextType = document.getElementById('one').nextSibling;
var span = nextType.nextSibling;
     alert(span.lastChild.nodeValue);
   }
</script>
</head>
<body>
<div id="div">
<p id = "one">我是p</p>
<span id="two">我是span</span>
</div>
</body>
</html>

p和span标签中间隔着文本节点,需要连续使用2次nextSibling才能选中span标签取得文本值

firstChild,lastChild,nextSibling,previousSibling都会将空格或者换行当做节点处理,但是有代替属性

所以为了准确地找到相应的元素,会用

firstElementChild,

lastElementChild,

nextElementSibling,

previousElementSibling

兼容的写法,这是JavaScript自带的属性。

但坏消息是IE6,7,8不兼容这些属性。IE9以上和火狐谷歌支持。

于是我写了一个接口口,测试能在包括ie6在内运行的函数(自己写的,不知有没有其他什么细节错误没注意,反正能运行并且过滤文本节点获取正确的下一个元素节点)

    function getNextElement(element){
var e = element.nextSibling;
if(e == null){//测试同胞节点是否存在,否则返回空
return null;
}
if(e.nodeType==3){//如果同胞元素为文本节点
var two = getNextElement(e);
if(two.nodeType == 1)
return two;
}else{
if(e.nodeType == 1){//确认节点为元素节点才返回
return e;
}else{
return false;
}
}
}

javascript 中的nextSibling和previousSibling使用注意事项的更多相关文章

  1. JavaScript中this的工作原理以及注意事项

    在JavaScript中,this 的概念比较复杂.除了在面向对象编程中,this 还是随处可用的.这篇文章介绍了this 的工作原理,它会造成什么样的问题以及this 的相关例子. 要根据this  ...

  2. JavaScript中DOM的层次节点(一)

    DOM是针对HTML和XML文档的一个API,描绘了一个层次化的节点树,允许开发人员添加.修改.删除节点的一部分. DOM将HTML和XML文档描绘成一个有多个节点构成的结构,节点分为12种不同的节点 ...

  3. JavaScript中的DOM及相关操作

    一.什么是DOM JavaScript由ECMAScript.DOM和BOM三部分组成,其中DOM代表描述网页内容的方法和接口,即文档对象模型(Document Object Model).在网页上, ...

  4. js学习笔记----JavaScript中DOM扩展的那些事

    什么都不说,先上总结的图~   Selectors API(选择符API) querySelector()方法 接收一个css选择符,返回与该模式匹配的第一个元素,如果没有找到匹配的元素,返回null ...

  5. nextSibling和previousSibling

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  6. 总结JavaScript中浏览器的兼容问题

    浅析JavaScript中浏览器的兼容问题 浏览器兼容性问题是在实际开发中容易忽略而又最重要的一部分.我们在讲老版本浏览器兼容问题之前,首先要了解什么是能力检测,它是来检测浏览器有没有这种能力,即判断 ...

  7. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  8. javascript中的this与函数讲解

    前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大家可以认为全局作用域其实就是Window函数的函数作用域,我们编写的js代码, ...

  9. JavaScript 中的数据类型

    Javascript中的数据类型有以下几种情况: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Function,Date,Ar ...

随机推荐

  1. HDU 4283 You Are the One

    题意:给定n(n<=100)个人,每个人有个固定的屌丝值D. 起初这些人是站成一行,当第i个人第j个去面试的时候他的值是 Di*j. 要求所有人面试之后 这些值加起来是最小的. 队伍站成一行(其 ...

  2. 【转】Java中字符串中子串的查找共有四种方法(indexof())

    原文网址:http://wfly2004.blog.163.com/blog/static/1176427201032692927349/ Java中字符串中子串的查找共有四种方法,如下:1.int ...

  3. 今天修改bug基本完成

    今天修改bug基本完成 在修改bug过程中配到几个郁闷的问题,印象最深的两个1.检查出生日期或日期的合法性,引用的日历控件不能完全保证取到值时操作,现在突然想到或许我该仔细研究日历控件接口,在返回错误 ...

  4. 《Mathematical Olympiad——数论》——整除

    数论这个东西吧,虽说也是高中IMOer玩的数学游戏,颇具美学性的证明比较多.就目前所知,它在算法里是一些加密技术的基础,不多言,开始具体题目的分析. 问题一:已知数列{an},且a0 = 2 , a1 ...

  5. AGG 之贝塞尔插值

    原文: http://liyiwen.iteye.com/blog/705489 之前 comp.graphic.algorithms 上有一个讨论,是关于怎么样使用曲线对多边形进行插值处理,使得最终 ...

  6. jMeter接口测试案例

  7. JavaScript中的[]和{}

    最早开始对js中括号的使用有疑问是在交互2值的时候: a = [b,b=a][0]; 详见JavaScript交换两个变量值的七种解决方案 因为 [[]][0] 的意思是:获取 [[]] 的第一个元素 ...

  8. lesson10:hashmap变慢原因分析

    下面的英文描述了String.hashCode()方法,在特定情况下,返回值为0的问题: Java offers the HashMap and Hashtable classes, which us ...

  9. Delphi 2007体验!

    Delphi 2007体验! baidu 内容摘要:CodeGear(From Borland) 公司公布了最新的Delphi 2007 For Win32版本号.作为一个 Delphi 的使用者,第 ...

  10. [PWA] 17. Cache the photo

    To cache photo, You need to spreate cache db to save the photo. So in wittr example, we cache the te ...