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的类型转换(字符转数字 数字转字符)
Aug 30 Javascript
Iframe实现跨浏览器自适应高度解决方法
Sep 02 Javascript
DOM 高级编程
May 06 Javascript
jquery图片滚动放大代码分享(2)
Aug 28 Javascript
jQuery获取字符串中出现最多的数
Feb 22 Javascript
JS面向对象编程详解
Mar 06 Javascript
Javascript闭包与函数柯里化浅析
Jun 22 Javascript
vue+vuex+axios+echarts画一个动态更新的中国地图的方法
Dec 19 Javascript
vue根据进入的路由进行原路返回的方法
Sep 26 Javascript
VuePress 静态网站生成方法步骤
Feb 14 Javascript
JS实现进度条动态加载特效
Mar 25 Javascript
vue组件库的在线主题编辑器的实现思路
Apr 03 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控制网页过期时间的代码
2008/09/28 PHP
PHP二维数组的去重问题解析
2011/07/17 PHP
php Hex RGB颜色值互换的使用
2013/05/10 PHP
深入分析php之面向对象
2013/05/15 PHP
探讨PHP JSON中文乱码的解决方法详解
2013/06/06 PHP
php从memcache读取数据再批量写入mysql的方法
2014/12/29 PHP
THINKPHP2.0到3.0有哪些改进之处
2015/01/04 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
2015/01/20 PHP
Laravel中使用自己编写类库的3种方法
2015/02/10 PHP
PHP回调函数与匿名函数实例详解
2017/08/16 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
2019/09/30 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
2010/09/12 Javascript
js阻止冒泡及jquery阻止事件冒泡示例介绍
2013/11/19 Javascript
jQuery File Upload文件上传插件使用详解
2016/12/06 Javascript
JavaScript之Vue.js【入门基础】
2016/12/06 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
2017/03/29 jQuery
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
BootStrap daterangepicker 双日历控件
2017/06/02 Javascript
vue中的scope使用详解
2017/10/29 Javascript
Vue中v-show添加表达式的问题(判断是否显示)
2018/03/26 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
JS判断数组四种实现方法详解
2020/06/29 Javascript
python web.py开发httpserver解决跨域问题实例解析
2018/02/12 Python
人脸识别经典算法一 特征脸方法(Eigenface)
2018/03/13 Python
学Python 3的理由和必要性
2019/11/19 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
美国时尚在线:Showpo
2017/09/08 全球购物
求职意向书
2014/04/01 职场文书
投标承诺函格式
2015/01/21 职场文书
工资证明范本
2015/06/12 职场文书
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python
如何使用PostgreSQL进行中文全文检索
2021/05/27 PostgreSQL
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP