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 相关文章推荐
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
Oct 25 Javascript
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
Jan 11 Javascript
你有必要知道的25个JavaScript面试题
Dec 29 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
Mar 21 Javascript
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
Sep 15 Javascript
JavaScript实现图片懒加载(Lazyload)
Nov 28 Javascript
setTimeout函数的神奇使用
Feb 26 Javascript
纯js实现的积木(div层)拖动功能示例
Jul 19 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
Aug 09 jQuery
vue router 用户登陆功能的实例代码
Apr 24 Javascript
vue实现五子棋游戏
May 28 Javascript
JavaScript canvas实现雨滴特效
Jan 10 Javascript
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基础设计模式大全(注册树模式、工厂模式、单列模式)
2015/08/31 PHP
PHP内核探索之解释器的执行过程
2015/12/22 PHP
Laravel框架Blade模板简介及模板继承用法分析
2019/12/03 PHP
js+FSO遍历文件夹下文件并显示
2007/03/07 Javascript
JQuery与iframe交互实现代码
2009/12/24 Javascript
理清apply(),call()的区别和关系
2011/08/14 Javascript
纯js写的分页表格数据为json串
2014/02/18 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
JQuery datepicker 用法详解
2015/12/25 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
jquery获取img的src值的简单实例
2016/05/17 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
js判断手机号是否正确并返回的实现代码
2017/01/17 Javascript
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
Element 默认勾选表格 toggleRowSelection的实现
2019/09/04 Javascript
ES10的13个新特性示例(小结)
2019/09/23 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
解决vue+router路由跳转不起作用的一项原因
2020/07/19 Javascript
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
python相似模块用例
2016/03/04 Python
Python3 操作符重载方法示例
2017/11/23 Python
Python如何使用字符打印照片
2020/01/03 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
Python爬虫获取豆瓣电影并写入excel
2020/07/31 Python
联想英国官网:Lenovo英国
2019/07/17 全球购物
办公室人员先进事迹
2014/01/27 职场文书
物业保安员岗位职责制度
2014/01/30 职场文书
乡镇总工会学雷锋活动总结
2014/03/01 职场文书
企业宣传方案
2014/03/04 职场文书
催款函怎么写
2015/06/24 职场文书
新兵入伍决心书
2015/09/22 职场文书
求职信:会计求职的写作技巧
2019/04/24 职场文书
Python基础之字符串格式化详解
2021/04/21 Python
Canvas如何做个雪花屏版404的实现
2021/09/25 HTML / CSS
一文搞懂Golang 时间和日期相关函数
2021/12/06 Golang