JavaScript stellt Dokumente über den Dokumenttyp dar. Im Browser ist das Dokumentobjekt eine Instanz von HTMLDocument und repräsentiert die gesamte HTML-Seite. Und das Document-Objekt ist eine Instanz des Window-Objekts, sodass auf es als globales Objekt zugegriffen werden kann. Dokumenttypknoten haben die folgenden Eigenschaften:
Der Wert von nodeType ist 9.
Der Wert von nodeName ist „#document“.
Der Wert von nodeValue ist null.
Der Wert von parentNode ist null.
Seine untergeordneten Knoten können ein DocumentType (höchstens einer), ein Element (höchstens einer), eine ProcessingInstruction oder ein Kommentar sein.
Der Dokumenttyp kann HTML-Seiten oder andere XML-basierte Dokumente darstellen. Die häufigste Anwendung ist das Dokumentobjekt als HTMLDocument-Instanz. Über dieses Dokumentobjekt können Sie nicht nur Informationen zur Seite abrufen, sondern auch das Erscheinungsbild der Seite und die zugrunde liegende Struktur manipulieren.
Untergeordnete Knoten des Dokuments
Obwohl der DOM-Standard vorschreibt, dass die untergeordneten Knoten des Dokumentknotens DocumentType, Element, ProcessingInstruction oder Comment sein können, gibt es zwei integrierte Verknüpfungen für den Zugriff darauf Untergeordnete Knoten. Das erste ist das documentElement-Attribut, das immer auf das -Element der HTML-Seite verweist. Die andere besteht darin, über die childNodes-Liste auf das Dokumentelement zuzugreifen. Der Zugriff darauf kann jedoch schneller über das documentElement-Attribut erfolgen. Das Folgende ist ein Beispiel:
<html> <body> </body> </html>
Nachdem die obige Seite vom Browser analysiert wurde, enthält ihr Dokument nur einen untergeordneten Knoten und das -Element. Der Code für den Zugriff auf dieses Element über das documentElement-Attribut und die childNodes-Liste lautet wie folgt:
//取得<html>元素的引用 var html = document.documentElement; alert(html === document.childNodes[0]); //true alert(html === document.firstChild); //true
Das obige Beispiel zeigt, dass die Werte von documentElement, firstChild und childNodes[0] gleich sind und sie alle verweisen auf das -Element.
Als Instanz von HTMLDocument verfügt das Dokumentobjekt auch über ein Body-Attribut, das direkt auf das
-Attribut verweist. document.body ist ein Attribut, das wir häufig in der Entwicklung verwenden:var body = document.body;
Alle Browser unterstützen das Attribut document.documentElement und das Attribut document.body.
Ein weiterer möglicher untergeordneter Knoten von Document ist DocumentType. Das Tag wird normalerweise als eine von anderen Teilen des Dokuments verschiedene Entität betrachtet und kann über das Doctype-Attribut aufgerufen werden.
var doctype = document.doctype; //获取<!DOCTYPE>的引用
Eigenschaften und Methoden des Dokumentobjekts
Das Dokumentobjekt ist eine Eigenschaft des Fensterobjekts. Wenn das Fenster in mehrere Frames unterteilt ist, ist jeder Frame eine Eigenschaft des Fensterobjekts und der Frame selbst ist tatsächlich eine Instanz des Fensterobjekts. Die allgemeinen Attribute des Dokumentobjekts werden in der folgenden Tabelle angezeigt:
Oben sind einige häufig verwendete Dokumentattribute aufgeführt, die vom aktuellen Browser unterstützt werden Sie können die folgende Methode verwenden:
var attrs = new Array(); for(var property in window.document) { attrs.push(property); attrs.sort(); } document.write("<table>"); for(var i=0;i<attrs.length;i++){ if(i == 0){ document.write("<tr>"); } if(i > 0 && i%5 == 0){ document.write("</tr><tr>"); } document.write("<td>" + attrs[i] + "</td>"); } document.write("</table>");
Der obige Code druckt die vom aktuellen Browser unterstützten Dokumentattribute in alphabetischer Reihenfolge und verschiebt dann die Tabelle auf die Seite.
In den Attributen des Dokumentobjekts oben beziehen sich die URL-, Domänen- und Referrer-Attribute auf die Anfrage der Webseite. Das URL-Attribut enthält die vollständige URL-Adresse und die Seitenadresse des Hinweises in der Adressleiste. Das Domain-Attribut enthält nur den Domainnamen der Seite, während das Referrer-Attribut die URL-Adresse der Seite speichert, die mit der aktuellen Seite verlinkt ist. Wenn keine Quellseite vorhanden ist, kann das Referrer-Attribut eine leere Zeichenfolge enthalten. Alle diese Informationen befinden sich in den HTTP-Anfrageheadern, wir können jedoch mit JavaScript darauf zugreifen.
//取得完整的URL地址 var URL = document.URL; //取得域名 var domain = document.domain; //取得来源页面的URL var referrer = document.referrer;
Elemente suchen
In DOM-Anwendungen besteht die häufigste Operation darin, einen Verweis auf ein Element oder eine Gruppe von Elementen abzurufen und dann einige Operationen auszuführen. Der Vorgang zum Abrufen von Elementen kann über die folgenden Methoden des Dokumentobjekts abgeschlossen werden.
document.getElementById()
document.getElementsByTagName
document.getElementsByName()
Die erste Methode document.getElementById() empfängt einen Parameter: die ID des abzurufenden Elements. Gibt das Element zurück, wenn es gefunden wird, andernfalls wird null zurückgegeben. Wenn die Seite mehrere Elemente mit derselben ID enthält, gibt die Methode getElementById() nur das erste Element im Dokument zurück. Wenn in IE-Browsern von IE7 und niedriger das Namensattribut des Formularelements mit der zu findenden Element-ID übereinstimmt, wird auch das Formularelement zurückgegeben, zum Beispiel:
<input type="text" name="someId" value="text value"> <div id="someId">div</div>
当使用document.getElementById("someId")来查找元素的时候,IE7浏览器会将元素返回。而其它浏览器则是返回div元素。
另一个经常使用的方法是document.getElementsByTagName,通过标签名来查找元素。该方法接收一个参数:要查找的标签名称。它会返回0个或多个元素的NodeList。在HTML文档中,该方法返回一个HTMLCollection对象,称为“动态”集合。例如,下面的代码获取页面中所有的元素,并返回一个HTMLCollection:
var images = document.getElementByTagName("img");
与NodeList相似,可以使用方括号语法或item()方法来访问HTMLCollection对象:
alert(images.length); //图片的数量 alert(images[0].src); //第一张图片的src属性 alert(images.item(0).src); //第一张图片的src属性
HTMLCollection对象还有一个方法:namedItem(),使用这个方法可以通过元素的name属性取得集合中的项。例如上面的图片集合中,如果有一张图片的name属性为mypic:
<img src="demoimg.jpg" name="mypic" alt="JavaScript-Dokumentobjektmodell – Dokumenttyp" >
那么就可以通过下面的方法从images变量中获取这张图片:
var mypic = images.namedItem("mypic");
如果想要获取页面中的所有元素,可以通过在getElementByTagName()方法中传入“*”通配符来获取。
var allElements = document.getElementByTagName("*");
第3个获取元素的方法是HTMLDocument特有的方法:getElementByName()。该方法会返回指定name属性的所有元素。例如下面的代码:
<ul> <li><input type="text" name="author" value="author1"></li> <li><input type="text" name="author" value="author2"></li> <li><input type="text" name="author" value="author3"></li> </ul>
var authors = document.getElementByName("author");
上面的代码会返回所有的li元素。同样,getElementByName()方法也会返回一个HTMLCollection对象。
HTML5中的querySelector和querySelectorAll方法
除了上面的三个查找元素的方法之外,在HTML5向Web API新引入了新的document.querySelector和document.querySelectorAll方法用来更方便地从DOM选取元素,功能类似于jQuery的选择器。
这两个方法使用差不多的语法,都是接收一个字符串参数,这个参数需要是合法的CSS选择语法。
element = document.querySelector('selectors'); elementList = document.querySelectorAll('selectors');
其中参数selectors 可以包含多个CSS选择器,用逗号隔开。
element = document.querySelector('selector1,selector2,...'); elementList = document.querySelectorAll('selector1,selector2,...');
使用这两个方法无法查找带伪类状态的元素,比如querySelector(':hover')不会得到预期结果。
querySelector方法返回满足条件的单个元素。按照深度优先和先序遍历的原则使用参数提供的CSS选择器在DOM进行查找,返回第一个满足条件的元素。
element = document.querySelector('div#container');//返回id为container的首个div element = document.querySelector('.foo,.bar');//返回带有foo或者bar样式类的首个元素
querySelectorAll方法返回所有满足条件的元素,结果是个nodeList集合。查找规则与前面所述一样。
elements = document.querySelectorAll('div.foo');//返回所有带foo类样式的div
但需要注意的是返回的nodeList集合中的元素是非实时(no-live)的,想要区别什么是实时非实时的返回结果,请看下面的例子:
<div id="container"> <div></div> <div></div> </div>
//首先选取页面中id为container的元素 container=document.getElementById('#container'); console.log(container.childNodes.length)//结果为2 //然后通过代码为其添加一个子元素 container.appendChild(document.createElement('div')); //这个元素不但添加到页面了,这里的变量container也自动更新了 console.log(container.childNodes.length)//结果为3
通过上面的例子就很好地理解了什么是会实时更新的元素。document.getElementById返回的便是实时结果,上面对其添加一个子元素后,再次获取所有子元素个数,已经由原来的2个更新为3个(这里不考虑有些浏览器比如Chrome会把空白也解析为一个子节点)。
文档的写入
document对象可以将输出流写入到网页中,它有4个方法:write()、writeln()、open()和close()。其中,write()和writeln()方法接收一个字符串参数,即要写入到输出流的文本。write()方法会原样写出,而writeln()方法会在字符串的末尾添加一个换行符(\n)。在页面加载的过程中,可以使用这两个方法来动态的添加内容,例如下面的代码:
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <p>当前的时间为: <script type="text/javascript"> document.write("<strong>"+(new Date()).toString()+"</strong>"); </script> </p> </body> </html>
以上就是JavaScript文档对象模型-Document类型的内容,更多相关内容请关注PHP中文网(www.php.cn)!