Dom其实就是将一些标记型的文档以及文档中的内容当成对象。
Dom三层模型:dom1:将html文档封装成对象
dom2:将xml文档封装成对象
dom3:将xml文档封装成对象
html
|----head
|----title
|----base
|----mata
|----link
|----style
|----script
|----body
|----div
|----form
|----input
|----select
|----span
|----table
|----tbody
|----tr
|----td
|----th
|-----dl
|----dt
|----dd
|----a
DOM树 节点
当标记型文档加载进内存,那么内存中有了一个对应的DOM树。当文档过大时,消耗资源,一般采用由事件驱动的sax解释。
节点类型:
标签型节点:类型type:1
文本节点: 类型type: 3
注释型节点: 类型type: 8
属性节点: 类型type: 2
document: 类型type: 9
* Document
getElementById 返回第一个对象的引用
getElementsByName("xxx")按名字,返回集合(数组)
getElementsByTagName("xxxx") 按标签名,标签集合(数组),大多容器性标签都具有这种特点。
document.all(index);
nodename nodetype attributes 属性集合
nextSibling 下一兄弟节点
previousSibling上一兄弟节点
childNode子节点 childNodes 获取作为指定对象直接后代的 HTML 元素 和 TextNode 对象的集合(数组)。
parentNode父节点
1)java中递归实例
public void listFile(File file,int level){
System.out.println(getSpace(level)+file.getName());
level++:
File[] files=file.
listFiles();
//取出所有文件
for(int x=0;x<files.length;x++){
if(files
.isDirctory){
listFile(files[x])
}else{
System.out.println(getSpace(lenvel)+files[x].getName());
}
}
}
public String getSpace(int level){
StringBuider sb=new StringBuilder();
for(int i=0;i<level;x++){
sb.append("|----");
}
return sb.toString;
}
2)javascript中查询document递归实例 (实验上将程序代码也当文本显示出来,不知如何去掉)
var str=""
function listNode(node,level)
{
printInfo
(node,level);
level++;
var nodes=node.childNodes;
//获取作为指定对象直接后代的 HTML 元素和 TextNode 对象的集合。
for(var x=0;x<nodes.length;x++)
{
if(nodes[x].hasChildNodes())
//返回表明对象是否有子对象的值。
listNode(nodes[x],level);
//递归
else
printInfo(nodes[x],level)
}
}
function getSpace(level)
{
var s="";
for(var x=0;x<level;x++){
s+="|----";
}
return s;
}
function printInfo(node,level){
str+=
getSpace(level)+"name:"+node.nodeName+"........."+"type:"+node.nodeType+"......"+"value:"+node.nodeValue+"
<br/>";
}
function getNode(){
listNode(document,0);
document.write(str);
}
(部分内部可参阅QQ 笔记)
|