javascript: The Document Object Model(DOM)

DOM

  • 节点类型的12个常量:
    • Node.ELEMENT_NODE
    • Node.ATTRIBUTE_NODE
    • Node.TEXT_NODE
    • Node.CDATA_SECTION_NODE
    • Node.ENTITY_REFERENCE_NODE
    • Node.ENTITY_NODE
    • Node.PROCESSING_INSTRUCTION_NODE
    • Node.COMMENT_NODE
    • Node.DOCUMENT_NODE
    • Node.DOCUMENT_TYPE_NODE
    • Node.DOCUMENT_FRAGMENT_NODE
    • Node.NOTATION_NODE
  • Node 的方法/特征:nodeName, nodeValue, nodeType, ownerDocument, firstChild, lastChild, childNodes, previousSibling, nextSibling, hasChildNodes(), attributes, appendChild(node), removeChild(node), replaceChild(newnode, node), insertBefore(newnode, node).
  • HTMLElement, 如HTMLDivElement代表了<div>
  • document.documentElement=<html>, document.body = <body>
  • element的attributes其实是NamedNodeMap, 可以用下列方法操作: getNamedItem(name), removeNamedItem(name), setNamedItem(node), item(pos).[这些方法都是返回一个Attr节点]. shortcuts:
    • getAttribute(name) = attributes.getNamedItem(name).value.
    • setAttribute(name, newvalue) = attribute.getNamedItem(name).value
    • removeAttribute(name) = attribute.removeNamedItem(name).
  • 访问指定节点:
    • getElementsByTagName()
    • getElementsByName()[ie 6和Opera 7.5在这个方法的实现上有些错误: 1. 还会返回id等于给定名称的元素.2. 他们仅仅检查<input/>和<img/>元素]
    • getElementById()[ie6有类似bug, id, name不分]
  • 创建和操作节点
    • createElement(), createTextNode(), appendChild()
    • 所有dom操作必须在页面完全下载完之后才能进行,因为页面正在载入 时,dom树还没有完全构建.所以必须使用onload事件.
    • removeChild(), replaceChild(), insertBefore()
    • createDocumentFragment().避免多次刷新document.

 

HTML DOM特征

 

  •  element.getAttribute("src") == element.src, element.getAttribute("border") == element.border. 例外是class, 因为class在ECMAScript中是一个保留字,所以element.getAttribute("class") == element.className.
  • table元素的额外属性.
    • <table>: caption, tBodies, tFoot, tHead, rows, createTHead(), createTFoot(), createCaption(), deleteTHead/TFoot/Caption(), deleteRow(position), insertRow(position).
    • <tbody>: rows, deleteRow(pos), insertRow(pos)
    • <tr>: cells, deleteCell(pos), insertCell(pos).

 

遍历DOM

NodeIterator( 深度优先搜索):

  • document.createNodeIterator(root, whatToShow, filter, entityReferenceExpansion)
  • whatToShow可以是:
    • NodeFilter.SHOW_ALL, SHOW_ELEMENT, SHOW_ATTRIBUTE, SHOW_TEXT, SHOW_CDATA_SECTION, SHOW_ENTITY_REFERENCE, SHOW_ENTITY, SHOW_PROCESSING_INSTRUCTION, SHOW_COMMENT, SHOW_DOCUMENT, SHOW_DOCUMENT_TYPE, SHOW_DOCUMENT_FRAGMENT, SHOW_NOTATION.
  • iterator.nextNode(), previousNode().
  • NodeFilter 子类, acceptNode()是唯一的方法,显示则返回NodeFilter.FILTER_ACCPET, 过滤则返回NodeFilter.FILTER_REJECT.

TreeWalker

  • 继承 NodeIterator,添加了:
    • parentNode()
    • firstChild()
    • lastChild()
    • nextSibling()
    • previousSibling()
  • document.createTreeWalker()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅帅兔子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值