JavaScript représente les documents via le type Document. Dans le navigateur, l'objet document est une instance de HTMLDocument et représente la page HTML entière. Et l'objet Document est une instance de l'objet window, il est donc accessible en tant qu'objet global. Les nœuds de type document ont les caractéristiques suivantes :
La valeur de nodeType est 9.
La valeur de nodeName est "#document".
La valeur de nodeValue est nulle.
La valeur de parentNode est nulle.
Ses nœuds enfants peuvent être un DocumentType (au plus un), Element (au plus un), ProcessingInstruction ou Comment.
Le type de document peut représenter des pages HTML ou d'autres documents XML. L'application la plus courante est l'objet document en tant qu'instance HTMLDocument. Grâce à cet objet document, vous pouvez non seulement obtenir des informations relatives à la page, mais également manipuler l'apparence de la page et sa structure sous-jacente.
Nœuds enfants du document
Bien que le standard DOM stipule que les nœuds enfants du nœud Document peuvent être DocumentType, Element, ProcessingInstruction ou Comment, il existe deux raccourcis intégrés pour accéder à son Noeuds enfants. Le premier est l'attribut documentElement, qui pointe toujours vers l'élément L'autre consiste à accéder à l'élément document via la liste childNodes, mais il est accessible plus rapidement via l'attribut documentElement. Voici un exemple :
<html> <body> </body> </html>
Une fois la page ci-dessus analysée par le navigateur, son document ne contient qu'un seul nœud enfant et l'élément Le code pour accéder à cet élément via l'attribut documentElement et la liste childNodes est le suivant :
//取得<html>元素的引用 var html = document.documentElement; alert(html === document.childNodes[0]); //true alert(html === document.firstChild); //true
L'exemple ci-dessus montre que les valeurs de documentElement, firstChild et childNodes[0] sont les mêmes, et elles tous pointent vers l'élément
En tant qu'instance de HTMLDocument, l'objet document possède également un attribut body, qui pointe directement vers l'attribut
document.body est un attribut que nous utilisons souvent en développement :var body = document.body;
Tous les navigateurs prennent en charge l'attribut document.documentElement et l'attribut document.body.
Un autre nœud enfant possible de Document est DocumentType. La balise est généralement considérée comme une entité différente des autres parties du document et est accessible via l'attribut doctype.
var doctype = document.doctype; //获取<!DOCTYPE>的引用
Propriétés et méthodes de l'objet document
L'objet document est une propriété de l'objet window. Lorsque la fenêtre est divisée en plusieurs frames, chaque frame est une propriété de l'objet window, et le frame lui-même est en réalité une instance de l'objet window. Les attributs communs de l'objet document sont affichés dans le tableau suivant :
Vous trouverez ci-dessus certains attributs de document couramment utilisés. Pour afficher tous les attributs de document pris en charge par le navigateur actuel, vous pouvez le faire. peut utiliser la méthode suivante :
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>");
Le code ci-dessus imprimera les attributs du document pris en charge par le navigateur actuel par ordre alphabétique, puis déplacera le tableau vers la page.
Dans les attributs de l'objet document ci-dessus, les attributs URL, domaine et référent sont liés à la requête de la page Web. L'attribut URL contient l'adresse URL complète, ainsi que l'adresse de la page de l'indice dans la barre d'adresse. L'attribut domain contient uniquement le nom de domaine de la page, tandis que l'attribut referrer stocke l'adresse URL de la page liée à la page actuelle. En l'absence de page source, l'attribut referrer peut contenir une chaîne vide. Toutes ces informations se trouvent dans les en-têtes de requête HTTP, mais nous pouvons y accéder via JavaScript.
//取得完整的URL地址 var URL = document.URL; //取得域名 var domain = document.domain; //取得来源页面的URL var referrer = document.referrer;
Recherche d'éléments
Dans les applications DOM, l'opération la plus courante consiste à obtenir une référence à un élément ou à un groupe d'éléments, puis à effectuer certaines opérations. L'opération d'obtention d'éléments peut être complétée par les méthodes suivantes de l'objet document.
document.getElementById()
document.getElementsByTagName
document.getElementsByName()
La première méthode document.getElementById() reçoit un paramètre : l'ID de l'élément à obtenir. Renvoie l'élément s'il est trouvé, sinon renvoie null. S'il existe plusieurs éléments avec le même ID dans la page, la méthode getElementById() renvoie uniquement le premier élément du document. Dans les navigateurs IE de IE7 et versions antérieures, si l'attribut name de l'élément de formulaire est le même que l'ID de l'élément à trouver, l'élément de formulaire sera également renvoyé, par exemple :
<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="Modèle d'objet de document JavaScript-Type de document" >
那么就可以通过下面的方法从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)!