《JS高程(3)》DOM节点层次DocumentType类型-第10章笔记(16)

DocumentType类型

DocumentType类型在Web浏览器中并不常用,仅有Firefox、Safari、Opera、Chrome4.0支持它。
DocumentType包含着与文档的doctype有关的所有信息,特征:

--
nodeType的值:10
nodeName的值:doctype
nodeValue的值:null
parentNode为:Document
子节点

在DOM1级中,DocumentType对象不能动态地创建,只能通过解析文档代码的方式来创建。支持它的浏览器会把DocumentType对象保存在document.doctype中,DocumentType中有三个属性:name、entities 、notations.
name:表示文档的名称;
entities :文档类型描述的实体的NameNodeMap对象;
notations:文档类型描述的符号的NameNodeMap对象。
通常,浏览器中的文档使用的都是HTML或XHTML文档类型,因而entities和notation都是空列表。

<!DICTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
DocumentType的name属性中保存的就是"HTML":
alert(document.doctype.name); //'HTML'
DocumentFragment类型

在所有节点类型中,只有DocumentFragment在文档中没有对应的标记。DOM规定文档片段(document fragment)是一种“轻量级”的文档,可以包含和控制节点,但不会像完整的文档那样占用额外的资源。
特征:

--
nodeType的值:11
nodeName的值:“#document fragment”
nodeValue的值:null
parentNode的值:null
子节点Element、ProcessingInstruction、Comment、Text、CDATASection、EntityReference

文档片段继承了Node的所有方法,通常用于执行那些针对文档的DOM操作。如果将文档中的节点添加到文档片段中,就会从文档树中移除该节点,也不会从浏览器中在看到该节点。添加到文档片段中的新节点同样也不属于文档树。可以通过appendChild()或insertBefore()将文档片段中内容添加到文档中。再将文档片段作为参数传递给这两个方式时,实际上只会将文档片段的所有子节点添加到相应位置上,文档片段本身永远不会成为文档树的一部分。

var fragment = document.createDocumentFragment();
var ul = document.getElementById("myList");
var li = null;

for (var i = 0; i < 3 ; i++){
    li = document.createElement("li");
    li.appendChild(document.createTextNode("Item"+(i+1)));
    fragment.appendChild(li);
}
ul.appendChild(fragment);

先去的对< ul>元素的引用,通过for循环创建3个列表项,并且通过文本表示他们的顺序,需要分别创建< li>元素、创建文本节点,再把文本节点添加到< li>元素。
接着使用appendChild()将< li>元素添加到文档片段中,结束后在调用appendChild()并传入文档片段,将所有列表项添加到< ul>元素中。此时,文档片段的所有子节点都被删除并转移到了< ul>元素中。

Attr类型

元素的特性在DOM中以Attr类型来表示。

在所有浏览器中,都可访问Attr类型的构造函数和原型。

从技术角度讲,特性就是存在于元素的attributes属性中的节点。
特性节点特征:

--
nodeType的值:11
nodeName的值:特性的名称
nodeValue的值:特性的值
parentNode的值:null
html中的子节点
xml中的子节点Text、EntityReference

尽管也是节点,但特性却不被认为是DOM文档树的一部分,最常使用的是getAttribute()、setAttribute()、removeArrribute()方法,很少直接引用特性节点。

Attr对象有3个属性:name、value和specified.
name : 特性名称(与nodeName的值相同);
value:特性的值(与nodeValue的值相同);
specified:布尔值,用以区别特性是在代码中指定的,还是默认的。

document.createAttribute()并传入特性的名称可以创建新的特性节点。
例:为元素添加align特性

var attr = document.createAttribute("align");
attr.value = "left";
element.setAttributeNode(attr);
alert(element.attributes("align").value); //"left"
alert(element.getAttributeNode("align").value); //"left"
alert(element.getAttribute("align")); //"left"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值