JavaScript高级程序设计(反刍) 10

第11章:

DOM作为ECMAScript中API的扩展存在于JavaScript中,但是很多的DOM操作方法并未写入标准,而是很多的浏览器各自为战,所以使用DOM的时候需要注意其使用范围。

选择符API:
QuerySelector()方法,接收一个标准的CSS选择符,返回与该模式匹配的第一个元素。也就是通过tagName/className/idName获取到一个元素,这里需要注意的是该方法仅接收第一个元素,其他的不接收。
该方法通过Document类型调用时,会在该元素的范围内查找,也就是同级元素查找,而使用Element类型调用时,会在该元素的后代元素范围内寻找。

QuerySelectorAll()方法,接收的参数与上面相同,但是这个方法返回的是一个携带全部属性和方法NodeList实例,是一组元素的快照,并非实时动态的。
该方法可以被Document、DocumentFragment、Element调用。
(个人不建议使用这种方法,太过于麻烦,远不如DOM中直接使用By方法来的迅速)

元素遍历:

ChildElementCount属性:返回子元素的个数(不包含文本节点和注释节点)
FirstElementChild属性:返回第一个子元素
LastElementChild属性:返回最后一个子元素
PreviousElementSibling:返回前一个兄弟元素
NextElementSibling:返回后一个兄弟元素

( 注意这里说的全部都是返回“元素”,而非节点。这里相当于是加强了前面这些属性的基础版本,去掉了容易出现混淆的文本节点和注释节点,将能作用的节点改称为元素 )

类扩充:
使用Document类型中的getElementsByClassName()方法获取类,这种方法支持连写,也就是一个属性获得多个类,直接在参数部分用空格间隔开就行。
新增操作类的属性classList,这个属性能直接获取到该标签的所有类名,且给出了四种方法操作:

  1. add()方法,增加类,如果存在就不添加了
  2. contains()方法,判断是否存在该类
  3. remove()方法,删除类
  4. toggle()方法,存在该类则删除,不存在则添加

(支持该属性的有chrome8.0、IE10.0、Firefox3.6、safari5.1、opera11.5)

焦点管理:
HTML5中添加了辅助焦点管理的功能,使用document.activeElement属性,该属性始终指向获得焦点的元素。
元素获得焦点的方式:页面加载、用户输入(尤其是输入框),以及代码中加入focus()方法获得焦点。
默认情况下文档刚加载完成时,document.activeElement属性获取的是body元素的引用,而文档加载期间获取到的值是null。
还有一种方法是判断文档是否获得了焦点,document.hasFocus()方法

使用document.readyState属性判断文档是否加载完成,该属性存在两个值:loading正在加载文档,complete加载完成

使用document.compatMode属性判断采用哪种文档模式,两个值:CSS1Compat标准模式,BackCompat混杂模式

扫描二维码关注公众号,回复: 12468064 查看本文章

引用文档中的标签,直接使用document.head属性,这里最好少用这个属性,很多时候不兼容

设置文档中的字符集,一般在HTML文档中直接使用标签,写入charset属性设置即可,也可以使用document.chatset属性设置,或者使用defaultCharset属性设置使用浏览器默认的字符集。

自定义数据属性:
HTML文档中写入:

<div id = “abc” data-name = “DivName” data-DivId = “123”>内容</div>

Js脚本中写入:

var name = div.dataset.name;           //DivName
var divId = div.dataset.DivId;         //123

( 这种自定义的写法并没有什么实际意义,但是在对元素上添加一个不可见数据时,可以起到很大的作用 )

插入标记使用innerHTML属性,这里使用该属性的时候需要注意几点:

  1. 不同的浏览器返回的标签不一样,有的大写,有的小写,所以使用时需要进行一个转换
  2. 不能用于写入script标签,除非添加defer属性或者前面添加一个有作用域的元素(有作用域指的是能被看到)
  3. Col、colgroup、frameset、head、html、table、tbody、thead、tfoot、tr不能用innerHTML插入

还有替换标记的outerHTML属性,使用outerHTML属性可以将引用该属性的标签全部替换掉

插入标签insertAdjacentHTML()方法,接收两个参数:插入位置和要插入的HTML文本,且第一个参数必须是:

  1. beforebegin,前一个同级元素
  2. afterbegin,在最前面插入一个子元素
  3. beforeend,在最后插入一个子元素
  4. afterend,后一个同级元素

查询节点直接的关系:
contains()方法,调用该方法确定参数节点是否为调用节点的后代节点
使用comparsDocumentPosition()方法,确定节点关系,但返回的是表示关系的掩码:1表示无关,2表示为同级节点且在该节点之前,4表示为同级节点且在该节点之后,8表示包含关系,16表示被包含关系

插入文本信息使用innerText属性,同时也存在一个替换属性outerText,不过不建议使用该属性。

页面滚动:
使用scrollIntoView()方法,控制页面滚动效果,该方法有个参数true/false,当参数为true时,元素的顶部与视图窗口平齐,当参数为false时,元素的底部与窗口平齐
(这里这个方法类似于使用a标签作为锚点跳转的方法,只不过该方法主要用在整个页面部分,使用a标签可以进行模拟,该方法用于页面设计出现本页跳转情况)

猜你喜欢

转载自blog.csdn.net/Feng_ye__/article/details/89638897