jquery nextsibling_javascript中预编译
JavaScript中的nextSibling和previousSibling和作用类似于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;
}
}
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/167464.html原文链接:https://javaforall.cn
相关文章
- jquery ajax步骤,jquery ajax(ajax请求的五个步骤jQuery)
- jquery监听浏览器刷新_jQuery刷新浏览器页面大小
- 《The Joy of Javascript》- 2 - Functor/Monad
- javascript html转换成markdown,如何使用Turndown使用JavaScript将HTML转换为Markdown[通俗易懂]
- 解释 JavaScript 中计时器的工作原理
- JavaScript实现限时抢购实例详解编程语言
- JavaScript学习总结(二十)——Javascript非构造函数的继承详解编程语言
- JavaScript学习总结(十七)——Javascript原型链的原理详解编程语言
- JavaScript学习总结(九)——Javascript面向(基于)对象编程详解编程语言
- 如何使用JavaScript来验证表单中的内容是否为详解编程语言
- javascript window获取iframe、iframe获取window、document详解编程语言
- Javascript阻止javascript事件冒泡,获取控件ID值
- 利用javascript/jquery对上传文件格式过滤的方法
- jQuery技巧大放送学习jquery的朋友可以看下
- JQuery操作Javascript对象和数组的工具函数小结
- JavaScript学习笔记(十五)
- jQuery学习7操作JavaScript对象和集合的函数
- 改变javascript函数内部this指针指向的三种方法
- JAVASCRIPT实现的WEB页面跳转以及页面间传值方法
- Javascript下IE与Firefox下的差异兼容写法总结
- JavaScript初学者需要了解10个小技巧
- Jquery知识点三jquery表单对象操作
- Javascript异步加载详解(浏览器在javascript的加载方式)
- js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
- javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
- jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
- JQuery中关于jquery.js与jquery.min.js的比较探讨
- javascript和jquery修改a标签的href属性
- JavaScript制作的可折叠弹出式菜单示例
- Jquery图片延迟加载插件jquery.lazyload.js的使用方法
- javascript原生和jquery库实现iframe自适应高度和宽度
- 在JavaScript中重写jQuery对象的方法实例教程
- 从JQuery源码分析JavaScript函数的apply方法与call方法