10.1.2 Document 类型
4、特殊集合
除了属性和方法,document对象还有一些特殊的集合
这些集合都是HTMLCollection对象,为访问文档常用的部分提供了快捷方式,包括:
◆ document.anchors,包含文档中所有带name特性的 <a>元素
◆ document.applets,包含文档中所有的<applet>元素,因为不再推荐使用<applet>元素,所以这个集合已经不建议使用了
◆ document.forms,包含文档中所有的<form>元素,与document.getElementByTagName(‘forms’)得到的结果相同;
◆ document.images,包含文档中所有的<img>元素,与document.getElementByTagName(‘img’)得到的结果相同;
◆ document.links,包含文档中所有带href特性的<a>元素。
5、DOM一致性检测
由于DOM分为多个级别,也包含多个部分,因此检测浏览器实现了DOM的哪些部分就十分必要了。
document.implementation属性就是为此提供相应信息和功能的对象,与浏览器对DOM的实现直接对应。
DOM1级只为document.implementation规定了一个办法,即hasFeature()。
这个方法要接受两个参数:要检测的DOM功能的名称及版本号。如果浏览器支持给定名称和版本的功能,则该方法返回true。
var hasXmlDom = document.implementation.hasFeature("XML","1.0");
hasFeature()也有缺点,因为实现者可以自行决定是否与DOM规范的不同部分保持一致。
6 文档写入
有一个document对象的功能已经存在很多年了,那就是将输出流写入到网页中的能力。
体现在下列4个方法中:write()、writeln()open()和close。
write()和writeln()方法都接受一个字符串参数,即要写入到输出流中的文本。write()会原样写入,而writeln()则会在字符串的末尾添加一个换行符( \n )
在页面被加载的过程中,可以使用这两个方法向页面中动态的加入内容:
<html>
<head>
<title>document.write() Example</title>
</head>
<body>
<p>The current date and time is:</p>
<script type="text/javascript">
document.write("<strong>"+(new date()).toString()+"</strong>");
</script>
</body>
</html>
还可以使用write()和writeln()方法动态的包含外部资源,例如Javascript文件等。在包含Javascript文件时,必须注意不能像下面的例子那样直接包含字符串"</script>",因为这会导致该字符串被解释为脚本块的结束,它后面的代码将无法执行。
<html>
<head>
<title>document.write() Example2</title>
</head>
<body>
<script type="text/javascript">
document.write("<script type=\"text/javascript\" src=\"fils.js\">"+"<\/script>");
</script>
</body>
</html>
字符串"</script>"不会被当作外部<script>标签的关闭标签,因而页面中也就不会出现多余的内容了。
如果再文档加载结束后再调用document.write(),那么输出的内容将会重写整个页面
方法open()和close()分别用于打开和关闭网页的输出流。
10.1.3 Element 类型
除了Document类型之外,Element 类型就要算是web变成中最常用的类型了。
Element 类型用于表现XML或HTML元素,提供了对元素签名、子节点即特性的访问。Element 节点具有以下特征:
◆ nodeType 的值为1;
◆ nodeName 的值为元素的标签名;
◆ nodeValue 的值为null;
◆ parentNode 可能是Document 或 Element;
◆ 其子节点可能是Element、Text、Comment、ProcessingInstruction、CDATASection 或 EntityReference。
要访问元素的签名,可以使用nodeName,也可以使用tagName;这两个属性会返回相同的值(使用后者主要是为了清晰起见。)
<div id = "myDiv"></div>
var div = document.getElementById("myDiv");
alert(div.tagName);//"DIV"
alert(div.tagName == div.nodeName);//true
在HTML中,标签名始终都以全部大写表示;而在XML中,标签名则始终会与源代码中的保持一致。
假如不确定自己的脚本将会在HTML还是XML文档中执行,最好是在比较之前将标签名转换为相同的大小写形式:
if(element.tagName.toLowerCase() == "div"){//这样最好(适用于任何文档)
//在此执行某些操作
}
1.HTML元素
HTMLElement类型直接继承自Element并添加了一些属性:
◆ id:元素在文档中的唯一标识符
◆ title:有关元素的附加说明信息,一般通过工具提示条显示出来。
◆ lang:元素内容的语言代码,很少使用
◆ dir:语言的方向,值为“ltr”(left-to-right,从左至右)或者“rtl”也很少使用
◆ className:与元素的calss特性对应,即为元素指定的css类。没有将这个属性命名为class,是因为class是ECMAScript的保留字
<div id = "myDiv" class = "bd" title="Body text" lang="en" dir="ltr"></div>
var div = document.getElementById("myDiv");
alert(div.id); //"myDiv"
alert(div.className); //"bd"
alert(div.title); //"Body text"
alert(div.lang); //"en"
alert(div.dir); //"ltr"
//也可以通过为每个属性赋予新的值,修改对应的每个特性:
div.id = "someOtherId";
div.className="ft";
div.title="Some other text";
div.lang="fr";
div.dir = "rtl";
2、取得特性:
每个元素都有一或者多个特性,这些特性的用途是给出相应元素或其内容的附加信息。
操作特性的DOM方法主要有三个:getAttribute()、setAttribute()和removeAtteibute()。这三个方法可以针对任何特性使用,包括那以HTMLElement类型属性的形式定义的特性。
注意,传递给getAttribute()的特性名与实际的特姓名相同。因此要想得到class特性值,应该传入“class”而不是“className”,后者只有在通过对象属性访问特性时才用,如果给定名称的特性不存在,getAttribute()返回null
通过getAttribute()方法也可以取得自定义特性的值,不过特性的名称是不区分大小写的,即“ID”和“id”代表的都是同一个特性。要注意的是:根据HTML5规范,自定义特性应该加上data-前缀以便验证