针对JS高级程序设计这本书,主要是理解概念,大部分要点源自书内。写这个主要是当个笔记加总结

存在的问题请大家多多指正!

DOM拓展

1选择符 API

1.1 querySelector()

由document调用,参数可以直接用css选择器的方式选择,选择成功返回选择到的第一个元素,选择失败则返回Null

var body = document.querySelector('body')
var myDiv = document.querySelector('#myDiv')
var selected = document.querySelector('.selected')
var img = document.querySelector('img.button')

1.2 querySelectorAll()

接受的参数是一样的,但是唯一不一样的事不仅仅接受一个元素,而是一个NodeList实例

NodeList总说,无非是拥有Item()方法,有length属性,还可以用[]来代替.item()。但是可能是经过了优化,在getElementByTagName上那种不一样,那种是实时显示的,这个NodeList实例类似一个快照,不会进行动态的查询。

1.3 matcheSelector()

这个方法通过element对象调用,参数是通过CSS选择器确定的另一个element对象,如果匹配,返回true,如果不匹配,返回false。

2.元素遍历

IE头铁,因为document对象调用childNodes的时候会忽略掉文本节点和注释,这回别人家为了弥补一下跟IE的差异,特别为dom加了五个属性

  • childElementCount:返回子元素的个数,不包括文本节点和注释
  • firstElementChild:指向一个元素;firstChild带上元素
  • lastElementChild:同理
  • previousElementSibling:同理
  • nextElementSilbling:同理

HTML5

HTML5带了一堆新的API,来瞅两眼。

3.1 与类相关的扩充

3.1.1getElementByClassName()

因为之前只有getElementById或者getElementByTagName,为了给类也整一个,所以就研究了一个getElementByClassName(),跟getElementByTagName没两样。参数是class,可以传入多个,用空格隔开,前后顺序无所谓。

例子:

var allCurrentUsernames = document.getElementsByClassNmae('username current')
var select = document.getElementById('myDiv').getElementByClassName('selected')

3.1.2 classList属性

之前操作类名:

var className  = div.className.split(/\s+/)

var pos = -1,
i,
len
for(i=0, len = classNames.length; i<len; i++){
if(className[i]=='user'){
pos = i
break
}
}

上炕都费劲,为了扭转这个尴尬的方法,所以HTML5加了一个新操作,就是给了element一系列属性

  • add(value)
  • contains(value)
  • remove(value):
  • toggle(value):切换操作,有了value把它删掉,没有value把他加上

上面那种操作简化一下:div.classList.remove('user')就完事了。

另外classLIst拥有item()方法

3.1.3 插入标记

1.innerHTML属性

innerHTML属性返回与调用元素的所有子节点(包括元素、注释和文本节点)对应的HTML标记,也就是说你编辑器里里面有啥他都能给你返回来,但是调用的元素的标签不在。

通过设置innerHTML属性的值可以设置里面的内容,可以原封不动的访问。

但是也会一些问题,比如说script标签会被忽略,因为script在浏览器里没有显示,所以他是个没有作用域的元素。可以再前面加个input标签,然后把input隐藏.

div.innerHTML = '<input type = \"hidden\"><script>alert('laotie666'')</script>'

这样不影响布局也不会让script标签被干掉

2.outerHTML属性

跟上面的差不多,区别是innerHTML不包括对象的标签,只换对象内部的标签。

而outerHTML属性一换把外面自己的标签也给换掉了。例子就不举了

3.insertAdjacentHTML()

里面两个参数,第一个是要插入的方式,第二个是插入的东西,方式如下,字符串格式:

  • 'beforebegin':当前元素之前插一个同辈
  • 'afterbegin':当前元素之下插入一个新子元素或者在一个字元素之前插入新子元素(有点绕),就是有旧儿子插到旧儿子前头,没儿子就插进一个儿子
  • 'beforeend':没儿子插进一个儿子,有很多儿子在最后一个旧儿子后面插一个儿子
  • 'afterend':在当前元素之后插入一个同辈元素

4.专有拓展

4.1 children属性

ie最近这个children只带元素的子节点,除此之外和childNode没有啥区别

4.2 contains()方法

某个节点是不是摸个节点的后代,A.contains(b),若B是A的后代节点,则返回true

4.3 插入文本

因为原来有innerHTML和outerHTML已经被纳入规范了,所以还剩了个innerText和outerText,来讲一讲

4.3.1 innerText属性

和innerHTML就差在text不能加入HTML标签,firefox不给你用。

如果你有带HTML标签的节点的话可以利用这一点去除HTML标签,就是:

div.innerText = div.innerText

4.3.2outterText属性

类似,文本节点会把元素替换掉,剩下的元素会被文当删除

javascript DOM拓展的更多相关文章

  1. 读书笔记:JavaScript DOM 编程艺术(第二版)

    读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...

  2. javascript DOM 操作 attribute 和 property 的区别

    javascript DOM 操作 attribute 和 property 的区别 在做 URLRedirector 扩展时,注意到在使用 jquery 操作 checkbox 是否勾选时,用 at ...

  3. JavaScript DOM 编程艺术·setInterval与setTimeout的动画实现解析

    先贴上moveElement()函数的大纲,为了方便观看,删了部分代码,完整版粘到文章后面. function moveElement(elementID,final_x,final_y,interv ...

  4. javascript DOM 操作

    在javascript中,经常会需要操作DOM操作,在此记录一下学习到DOM操作的知识. 一.JavaScript DOM 操作 1.1.DOM概念 DOM :Document Object Mode ...

  5. javascript DOM操作之 querySelector,querySelectorAll

    javascript DOM操作之 querySelector,querySelectorAll

  6. javaScript DOM JQuery AJAX

    http://www.cnblogs.com/wupeiqi/articles/5369773.html 一 JavaScript JavaScript是一门编程语言,浏览器内置了JavaScript ...

  7. JavaScript : DOM文档解析详解

    JavaScript DOM  文档解析 1.节点(node):来源于网络理论,代表网络中的一个连接点.网络是由节点构成的集合 <p title=“a gentle reminder”> ...

  8. JavaScript DOM 编程艺术(第2版)读书笔记(1)

    JavaScript 简史 JavaScript 是Netscape公司与Sun公司合作开发的.在 JavaScript 1.0发布时,Netscape Navigator主宰着浏览器市场.微软在推出 ...

  9. javascript DOM操作HTML文档

    文档对象模型(DOM)是W3C为解决浏览器混战时代不同浏览器环境之间的差别而制定的模型标准.W3C将文档对象模型定义为:是一个能让程序和脚本动态 访问和更新文档内容.结构和样式的语言平台.提供了标准的 ...

随机推荐

  1. 微信公众号token验证失败

    我用的是python3+,而官网给的例子是python2的写法.问题就在python版本不同. 下面是截取官方的实例代码的一部分 list = [token, timestamp, nonce] li ...

  2. PAC在异常检测中的应用

    注:资料均来源于网络,本文只做知识分享,如侵立删,谢谢. PAC算法背景简述: 在许多领域的研究与应用中,通常需要对含有多个变量的数据进行观测,收集大量数据后进行分析寻找规律.多变量大数据集无疑会为研 ...

  3. Spring Data介绍

    Spring Data是Spring 的一个子项目.用于简化数据库访问,支持NoSQL和关系数据库存储.其主要目标是使数据库的访问变得方便快捷. Spring Data 项目所支持NoSQL存储: M ...

  4. 新手Java在华为的几点建议?

    随着互联网时代的飞速发展,越来越多的人投身于软件开发行业,大家都称他们为程序员,或者码农. 这些程序员的水平也是参差不齐的,有些人从比较好的学校毕业,水平却一般般:也有些人从一般搬的学校毕业,但是水平 ...

  5. 不使用xftp上传/下载文件到linux

    yum install lrzsz    # 安装软件 window端上传到linux端: 1. window端先压缩需上传的文件 2. linux端运行命令rz 3. 在弹出的窗口选择压缩好的文件, ...

  6. ASP.NET Core MVC 中的 Model 模型

    ASP.NET Core MVC 中的 Model 我们希望最终从 Student 数据库表中查询特定的学生详细信息并显示在网页上,如下所示. MVC 中的模型包含一组表示数据的类和管理该数据的逻辑. ...

  7. STL map 简介

    STL map 简介 转载于:http://www.cnblogs.com/TianFang/archive/2006/12/30/607859.html 1.目录 map简介 map的功能 使用ma ...

  8. MySQL实战45讲学习笔记:第二十二讲

    一.引子 不知道你在实际运维过程中有没有碰到这样的情景:业务高峰期,生产环境的 MySQL 压力太大,没法正常响应,需要短期内.临时性地提升一些性能. 我以前做业务护航的时候,就偶尔会碰上这种场景.用 ...

  9. 关于Adobe Premiere Pro视音频不同步的解决方法

    在Potplayer和系统播放器都正常 但Pr里面就是音画不同步 原因是Pr识别错误,让音频比视频快了,这时要将视频后拉一点就ok了

  10. window环境下的oracle错误error: 0x7e的解决方法

    今天连接一个Win2008 Server服务端上的一个oracle出现了下面的这些错误 LoadLibraryFromPath: FQ Dll C:\Windows\system\oci.dll is ...