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 相关文章推荐
javascript new 需不需要继续使用
Jul 02 Javascript
基于mootools 1.3框架下的图片滑动效果代码
Apr 22 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
Apr 02 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
Sep 06 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
Feb 17 Javascript
Javascript writable特性介绍
Feb 27 Javascript
JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)
Jun 12 Javascript
vscode下vue项目中eslint的使用方法
Jan 13 Javascript
微信小程序文章详情页跳转案例详解
Jul 09 Javascript
JavaScript 浏览器对象模型BOM原理与常见用法实例分析
Dec 16 Javascript
基于vue实现微博三方登录流程解析
Nov 04 Javascript
vue2实现provide inject传递响应式
May 21 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+DBM的同学录程序(4)
2006/10/09 PHP
第八节--访问方式
2006/11/16 PHP
php disk_free_space 返回目录可用空间
2010/05/10 PHP
php获取字段名示例分享
2014/03/03 PHP
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
2013/01/23 Javascript
Javascript中设置默认参数值示例
2014/09/11 Javascript
原生js实现日期联动
2015/01/12 Javascript
javascript动态创建表格及添加数据实例详解
2015/05/13 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
2015/07/03 Javascript
IE中document.createElement的iframe无法设置属性name的解决方法
2015/09/14 Javascript
微信小程序 JS动态修改样式的实现代码
2017/02/10 Javascript
微信小程序点击控件修改样式实例详解
2017/07/07 Javascript
vue2 v-model/v-text 中使用过滤器的方法示例
2019/05/09 Javascript
解决前后端分离 vue+springboot 跨域 session+cookie失效问题
2019/05/13 Javascript
基于jQuery实现可编辑的表格
2019/12/11 jQuery
vue项目中使用bpmn-自定义platter的示例代码
2020/05/11 Javascript
js实现全选和全不选功能
2020/07/28 Javascript
Python文件及目录操作实例详解
2015/06/04 Python
Python中如何使用if语句处理列表实例代码
2019/02/24 Python
python TF-IDF算法实现文本关键词提取
2019/05/29 Python
创建Shapefile文件并写入数据的例子
2019/11/26 Python
基于Python爬取股票数据过程详解
2020/10/21 Python
美国家用电器和电子产品商店:Abt
2016/09/06 全球购物
英国著名的茶叶品牌:Whittard of Chelsea
2016/09/22 全球购物
Python如何定义一个函数
2015/09/01 面试题
Java里面Pass by value和Pass by Reference是什么意思
2016/05/02 面试题
国际贸易毕业生求职信范文
2014/02/21 职场文书
劳动竞赛口号
2014/06/16 职场文书
抗震救灾标语
2014/06/26 职场文书
党员先进性教育整改措施
2014/09/18 职场文书
小学生运动会通讯稿
2014/09/23 职场文书
党性分析材料格式
2014/12/19 职场文书
医院员工辞职信范文
2015/05/12 职场文书
读《钢铁是怎样炼成的》有感:百炼方成钢
2019/11/05 职场文书
MySQL常见优化方案汇总
2022/01/18 MySQL