javascript针对DOM的应用分析(二)


Posted in Javascript onApril 15, 2012

其实在原生的也JS也有这些属性。和JQ几乎相同但是比JQ少一些。但是用起来却比JQ麻烦一点。主要因为FF浏览器,因为FF会把你的换行也当做一个DOM元素。比如说

<div id = "dom"> 
<div></div> 
<div></div> 
</div>

我用原生的JS获取ID为dom的元素下的子元素。用我第一章说的方法就是var a = document.getElementById("dom").getElementsByTagName("div");这个没问题。可以alert(a.length)提示会是2,但是我们现在换一种方法获取就是我上章提到的var b = document.getElementById("dom").childNodes;如果这样alert(b.length)IE浏览器上没问题还是2,但是在FF浏览器上会提示是4,这就是因为FF把换行也当做一个元素了。
所以我们必须处理一下才能用JS的那些属性。处理思想很简单就是遍历一下这些元素。把元素类型为空格而且是文本都删除。处理函数是这样的
function del_space(elem){ 
var elem_child = elem.childNodes; 
for(var i=0;i<elem_child.length;i++){ 
if(elem_child.nodeName == "#text" && !/\S/.test(elem_child.nodeValue)) 
{elem.removeChild(elem_child)} 
}}

我解释一下这个函数
var elem_child = elem.childNodes;
把传进来的elem元素的子元素都扔给elem_child;
for(var i=0;i<elem_child.length;i++){ 
if(elem_child.nodeName == "#text" && !/\S/.test(elem_child.nodeValue)) 
{elem.removeChild(elem_child)} 
}

遍历这些子元素。如果这些元素里面有节点类型是文本并且这个文本类型节点的节点值是空的。就把它删除

(nodeName是JS里的一个属性,得到这个节点的节点类型,/\S/这个是非空字符在JS里的正规表达式。前面加一个感叹号就表示是空字符。test是JS的一个方法,就是把它里面的东西和外面的东西对比一下。nodeValue表示得到这个节点里的值removeChild也是个方法就删除外面这个元素的某个子元素)

这样只需要在调用这些属性之前调用这个函数把空格清理一下就能放心用了比如

<div id = "dom"> 
<div></div> 
<div></div> 
</div> <script> 
function dom(){ 
var a = document.getElementById("dom"); 
del_space(a);调用清理空格的函数 
var b = a.childNodes;获取a的全部子节点; 
var c = a.parentNode;获取a的父节点; 
var d = a.nextSbiling;获取a的下一个兄弟节点 
var e = a.previousSbiling;获取a的上一个兄弟节点 
var f = a.firstChild;获取a的第一个子节点 
var g = a.lastChild;获取a的最后一个子节点 
} 
</script>

(另外说下。var b = a.childNodes;获取的也是一个数组;所以比如我要用第一个节点就是childNodes[0];我要用第二个节点就是childNodes[1];以此类推)

到这里获取DOM方面就算是结束了。下章就教大家如何操作DOM元素。

Javascript 相关文章推荐
用JS剩余字数计算的代码
Jul 03 Javascript
js相册效果代码(点击创建即可)
Apr 16 Javascript
深入分析JQuery和JavaScript的异同
Oct 23 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
Jul 17 Javascript
无需 Flash 使用 jQuery 复制文字到剪贴板
Apr 26 Javascript
jQuery增加、删除及修改select option的方法
Aug 19 Javascript
jQuery插件WebUploader实现文件上传
Nov 07 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
Aug 17 Javascript
基于Vuex无法观察到值变化的解决方法
Mar 01 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
Sep 18 Javascript
JS如何生成随机验证码
Mar 02 Javascript
详解Vue中的自定义指令
Dec 07 Vue.js
javascript针对DOM的应用实例(一)
Apr 15 #Javascript
JavaScript中的null和undefined解析
Apr 14 #Javascript
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
Apr 14 #Javascript
jquerymobile checkbox及时刷新才能获取其准确值
Apr 14 #Javascript
深入理解JavaScript系列(16) 闭包(Closures)
Apr 12 #Javascript
深入理解JavaScript系列(15) 函数(Functions)
Apr 12 #Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
Apr 12 #Javascript
You might like
PHP句法规则详解 入门学习
2011/11/09 PHP
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
YII2框架中添加自定义模块的方法实例分析
2020/03/18 PHP
javascript标签在页面中的位置探讨
2013/04/11 Javascript
JS动态获取当前时间,并写到特定的区域
2013/05/03 Javascript
ie与ff下的event事件使用介绍
2013/11/25 Javascript
浅析document.ready和window.onload的区别讲解
2013/12/18 Javascript
父节点获取子节点的字符串示例代码
2014/02/26 Javascript
chrome下img加载对height()的影响示例探讨
2014/05/26 Javascript
jquery及js实现动态加载js文件的方法
2016/01/21 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
2016/08/10 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
JavaScript中Object值合并方法详解
2017/12/22 Javascript
基于jquery实现左右上下移动效果
2018/05/02 jQuery
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
vue-cli3.0 脚手架搭建项目的过程详解
2018/10/19 Javascript
JavaScript利用键盘码控制div移动
2020/03/19 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
2020/04/07 Javascript
[04:28]DOTA2亚洲邀请赛小组赛第五日 TOP10精彩集锦
2015/02/03 DOTA
[01:00:52]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第一场
2018/04/05 DOTA
[03:12]完美世界DOTA2联赛PWL DAY9集锦
2020/11/10 DOTA
python二分法实现实例
2013/11/21 Python
OpenCV实现人脸识别
2017/04/07 Python
使用python画社交网络图实例代码
2019/07/10 Python
python使用smtplib模块发送邮件
2020/12/17 Python
学生自我鉴定范文
2013/10/04 职场文书
分公司经理岗位职责
2013/11/11 职场文书
高中体育教学反思
2014/01/24 职场文书
2014年学习雷锋活动总结
2014/03/01 职场文书
经理助理岗位职责
2014/03/05 职场文书
中国梦演讲稿范文
2014/08/28 职场文书
规范化管理年活动总结
2014/08/29 职场文书
2014年人事部工作总结
2014/12/03 职场文书
技术员岗位职责范本
2015/04/11 职场文书
旅游投诉信范文
2015/07/02 职场文书
投诉信回复范文
2015/07/03 职场文书