JavaScript的DOM编程总结

DOM(文档对象模型), 与语言无关, 用于操作XML(在Web中)和HTML(在浏览器在)文档的应用程序接口。访问DOM次数越多, 速度越慢, 费用也就越高。

最小化DOM访问次数,尽可能在JavaScript端处理。

如果需要多次访问某个DOM节点,请使用局部变量存储它的作用。

小心处理html集合,因为它实时系着底层文档。把集合的长度缓存到一个变量中,并在迭代中使用它。如果需要经常操作集合,建议把他拷贝到一个数组中。

如果可能,请使用速度更快的API,比如querySelectorAll()和firstElementChild()。

重排: 当DOM的变化影响了元素的几何属性(高和宽),比如改变边框宽度或给段落增加文字,导致行数增加,浏览器需要重新计算元素的几何属性,同样其他元素的几何属性和位置也会因此受到影响。浏览器会使渲染树中受到影响的部分失效,并重新构造渲染树。这个过程称为'重排'。

重绘: 完成重排后,浏览器会重新绘制受影响的部分到屏幕中,这个过程称为'重绘'。

要留意重绘和重排;批量修改样式时,'离线'操作DOM树,使用缓存,并减少访问布局信息的次数。

动画中使用绝对定位,使用拖放代理。

使用事件委托来减少事件处理器的数量。

innerHTML属性: ducument.getElementById('here').innerHTML()

保准的DOM方法: ducument.createElement()、 ducument。createTextNode()

节点克隆: ducument.cloneNode()

获取集合: ducument.getElementByName()

      ducument.getElementByClassName()

      ducument.getElementByTagName()

这个集合对象是一个类似数组的列表, 没有数组的push和slice方法, 但提供数组中的length属性,访问集合元素时使用局部变量

页面中的所有img元素: ducument.images

页面中所有a元素: ducument.links

页面中所有表单元素: ducument.forms

页面中第一个表单的所有字段: ducument.forms[0].elements

获取第一个元素: ducument.getElementById('div').firstChild

获取相邻元素: ducument.getElementById('div').firstChild.nextSibling

获取元素集合: ducument.getElementById('div').childNodes

API只返回元素节点: child 代替 childNodes

          childElementCount 代替 childNodes.length

            firstElementChild 代替 firstChild

          lastElementChild 代替 lastChild

          nextElementChild 代替 nextSibling

          previousElementSibling 代替 previousSibling

选择器API: ducument.querySelectorAll('#menu a') <=> ducument.getElementById('menu').getElementByTagName('a')

class为warning和notice的元素: ducument.querySelectorAll('div.warning, div.notice')

              <=>  var errs=[];

                 divs = doucument.getElementsByTagName('div');

                 className = '' ;

                 for(var i=0; len = divs.length; i<len; i++) {

                  className = divs[i].className;

                  if (className == 'notice' || className == 'warning') {

                  errs.push(divs[i]);

                  }

                }

缓存布局信息: current++   

        mgElement.style.left = current + 'px';

        myElement.style.top = current + 'px';

        if (current >=500) {

         stopAnimation();       

        }

                        

转载于:https://www.cnblogs.com/floraCnblogs/p/DOM.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2017.1.20活动

1、根据教程用倾斜开关控制了一个小灯的亮灭&#xff08;倾斜到达一定角度亮或到达一定角度灭&#xff09;&#xff0c;后自己尝试了利用倾斜开关控制两个小灯&#xff0c;即一开始绿灯亮红灯灭&#xff0c;到达一定角度后&#xff0c;绿灯亮起红灯灭掉&#xff0c;附代码&…

oracle 增加间隔分区,oracle分区表之间隔分区(oracle 11g) - 漫兮网

范围分区允许用户根据分区键列值的范围创建分区。下面是一个按范围分区表的示例&#xff1a;create table sales6(sales_id number,sales_dt date)partition by range (sales_dt)(partition p0701 values less than (to_date(2007-02-01,yyyy-mm-dd)),partition p0702 values l…

c++ try catch语句_再问你一遍,你真的了解try..catch(finally)吗???

定义首先来看下 MDN 的定义&#xff1a;The try...catch statement marks a block of statements to try and specifies a response should an exception be thrown.try...catch语句标记要执行的语句&#xff0c;并指定一个当有异常抛出时候的响应简短的一句的确描述了try...ca…

lamp架构,搭建一个网络平台

首先更改主机名和 hosts 安装软件包&#xff0c;设置启动服务 设置数据库密码 上传discuz论坛包 将discuz注册的用户名写在mariadb数据库中 解压discuz包 unzip discuz包 -d /var/www/html cd到upload下 cp -rf * /var/www/html 进入数据库 mysql -uroot -p create database…

MyEclipse中SVN的使用方法

1、 加载插件 svn-myeclipse插件site-1.10.2.zip&#xff0c;解压缩后&#xff0c;将文件夹下的所有文件拷贝到MyEclipse安装包下的MyEclipse 8.5\dropins文件夹下&#xff0c;然后重新打开myeclipse&#xff0c;会弹出一个报错窗口&#xff0c;不要管它&#xff0c;关闭后&…

oracle数据泵导出csv文件,数据泵expdp导出遇到ORA-01555和ORA-22924问题的分析和处理...

使用数据泵导出数据库数据时&#xff0c;发现如下错误提示&#xff1a;ORA-31693: Table data object "CAMS_CORE"."BP_EXCEPTION_LOG" failed to load/unload and is being skipped due to error:ORA-02354: error in exporting/importing dataORA-01555:…

Go程序开发---Go环境配置:CentOS6.5+Go1.8标准包安装

1.Go安装 1.1Go的三种安装方式 Go有多种安装方式&#xff0c;可以选择自己习惯的方式进行&#xff0c;这里介绍三种安装方式&#xff1a; 1&#xff09;Go源码安装 2&#xff09;Go标准包安装 3&#xff09;第三方工具安装 这里主要介绍下Go标准包在CentOS6.5系统中的安装方式 …

python矩阵乘法_鱼书——第一章 Python入门

one 第一章1.1 Python是什么Python是一个简单、易读、易记的编程语言&#xff0c;而且是开源的&#xff0c;可以免费地自由使用。Python可以用类似英语的语法编写程序&#xff0c;编译起来也不费力&#xff0c;因此我们可以很轻松地使用Python。特别是对首次接触编程的人士来说…

深入浅出面向对象分析与设计

深入浅出面向对象分析与设计书籍 下载位置&#xff1a;http://pan.baidu.com/s/1o7gmmuu转载于:https://www.cnblogs.com/wlming/p/5160140.html

[SHOI2002]百事世界杯之旅

题目&#xff1a;“……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字。只要凑齐所有百事球星的名字&#xff0c;就可参加百事世界杯之旅的抽奖活动&#xff0c;获得球星背包&#xff0c;随声听&#xff0c;更克赴日韩观看世界杯。还不赶快行动&#xff…

Oracle adviser,Oracle10g SQL tune adviser

Oracle10g SQL tune adviser简单介绍本文简单介绍下SQL Tuning Adviser的配置使用方法和一些相关知识点&#xff0c;如果了解SQL Tuning Adviser详细信息&#xff0c;参看Oracle联机文档。本文对分析结果没有详细分析。一、自动SQL Tuning简单介绍&#xff1a;1、优化模式&…

考托福

todo 香港的博士 转载于:https://www.cnblogs.com/dunfentiao/p/5164028.html

keepalived vip ping不通_【干货分享】OpenStack LVS负载均衡为什么不通?

背景介绍OpenStack环境Neutron 的安全组会向虚拟机默认添加 anti-spoof 的规则&#xff0c;将保证虚拟机只能发出&#xff0f;接收以本机Port为原地址或目的地址(IP、MAC)的流量&#xff0c;提高了云的安全性。但是LVS等需要绑定VIP的场景&#xff0c;默认流量是被拦截的。需要…

Docker安装ssh,supervisor等基础工具

2019独角兽企业重金招聘Python工程师标准>>> Docker安装ssh&#xff0c;supervisor等基础工具 需要提前下载好官方的ubuntu镜像&#xff0c;我这里使用的是ubuntu:14.04版本&#xff0c;这里安装了一些基础的工具ssh&#xff0c;curl&#xff0c;wget&#xff0c;vi…

中南大学 oracle试卷,数据库原理期末复习(中南大学)数据库原理、技术及应用2.ppt...

2014 春季 信息11,12 DB P,T&A-张祖平 数据库原理、技术及应用 张祖平/Zhang Zuping 电子信息工程系 School of Information Science and Engineering,Central South University , zpzhangmail.csu.edu.cn 本章小结 关系模型中的相关概念 关系(集合)&#xff0c;性质&#…

Pandas时间差(Timedelta)

时间差(Timedelta)是时间上的差异&#xff0c;以不同的单位来表示。例如&#xff1a;日&#xff0c;小时&#xff0c;分钟&#xff0c;秒。它们可以是正值&#xff0c;也可以是负值。可以使用各种参数创建Timedelta对象&#xff0c;如下所示 - 字符串 通过传递字符串&#xff0…

nginx集群_windows环境下搭建简单Nginx+Tomcat集群

通俗点将&#xff0c;负载均衡就是因为访问流量太大&#xff0c;导致项目访问不流畅、甚至宕掉&#xff0c;所以通过一种分流的方式来缓解这种情况。一、 工具nginx-1.8.0apache-tomcat-6.0.33二、 目标实现高性能负载均衡的Tomcat集群&#xff1a;三、 步骤1、首先下载Nginx&a…

颜色传感器TCS230及颜色识别电路(转)

摘要 TCS230是美国TAOS公司生产的一种可编程彩色光到频率的传感器。该传感器具有分辨率高、可编程的颜色选择与输出定标、单电源供电等特点&#xff1b;输出为数字量&#xff0c;可直接与微处理器连接。文中主要介绍TCS230的原理和应用&#xff0c;以及色光和白平衡的知识&…

自定义对话框 提示:Unable to add window token null is not for an application

这是因为在new Dialog(context);的时候传入的context是通过getApplicationContext()获得的&#xff0c;这样就会报错。 把context的获得方式改为MainActivity.this就好了。 转载于:https://www.cnblogs.com/qlong8807/p/5167560.html

[51Nod 1218] 最长递增子序列 V2 (LIS)

传送门 Description 数组A包含N个整数。设S为A的子序列且S中的元素是递增的&#xff0c;则S为A的递增子序列。如果S的长度是所有递增子序列中最长的&#xff0c;则称S为A的最长递增子序列&#xff08;LIS&#xff09;。A的LIS可能有很多个。例如A为&#xff1a;1 3 2 0 4&#…