学习笔记二|脚本化文档

DOM概览

文档对象模型(DOM)是表示和操作HTML和XML文档内容的基础API。

选取文档元素

  • 用指定的id属性;
  • 用指定的name属性;
  • 用指定的标签属性;
  • 用指定的css类;
  • 匹配指定的css选择器。

通过ID选取元素

var section1 = document.getElementById("section1");

通过名字选取元素

var radiobuttons = document.getElementsByName("favorite_color");

getElementsByName()定义在HTMLDocument类中,而不在Document类中,所以它只针对HTML文档可用,在XML文档中不可用。它返回一个NodeList对象,后者的行为类似一个包含若干Element对象的只读数组。

//有些元素可以作为Document属性仅通过名字来选取
//针对***<form name="shipping_address">***
var form = document.shipping_address;

通过标签名选取元素

var spans = document.getElementsyTagName("span");

该方法返回一个NodeList对象。并且不区分大小写。
给getElementsyTagName()传递通配符参数将获得一个代表文档中所有元素的NodeList对象。*

通过CSS类选取元素

var test = document.getElementByClassName("class_1");

通过CSS选择器选取元素

#nav  //id="nav"的元素
div     //所有<div>元素
.warning   //所有在class属性值中包含了“warning”的元素
p[lang="fr"]   //所有使用法语的段落,如:<p lang="fr">
*[name="x"]  //所有包含name="x"属性的元素
#log>span   //id="log"元素的子元素中的所有<span>元素
body>h1:first-child  //<body>的子元素中的第一个<h1>元素
div,#log    //所有<div>元素,以及id="log"的元素

document.all[]

document.all[0]     //文档中第一个元素
document.all["navbar"] //id或name为"navbar"的元素(或多个元素)
document.all.navbar  //同上
document.all.tags("div")  //文档中所有的<div>元素
document.all.tags("p")[0] //文档中第一个<p>元素

文档结构和遍历

作为节点树的文档

Document对象、它的Element对象和文档中表示文本的Text对象都是Node对象。有以下属性:

  • parentNode:该节点的父节点,如果没有父节点就是null;
  • childNodes: 只读的类数组对象(NodeList对象),它是该节点的子节点的实时表示;
  • firstChild、lastChild: 该节点的子节点中的第一个和最后一个,没有则为null;
  • nextSibling、previousSibling: 该节点的兄弟节点中的前一个和后一个。
  • nodeType: 该节点的类型。
  • 9:Document节点
  • 1: Element节点
  • 3: Text节点
  • 8: Comment节点
  • 11: DocumentFragment节点
  • nodeValue: Text节点或Comment节点的文本内容。
  • nodeName: 元素的标签名,以大写形式表示。

属性

HTML属性作为Element属性

数据集属性

在HTML5文档中,任意以“data-”为前缀的小写的属性名字都是合法的。
HTML5还在Element对象上定义了dataset属性。该属性指代一个对象,它的各个属性对应于去掉前缀的data-属性。因此dataset.x应保存data-x属性的值。

作为Attr节点的属性

Node类型定义了attributes属性。

元素的内容

作为HTML的元素内容

Paste_Image.png

作为纯文本的元素内容

var para = document.getElementByTagName("p")[0];   //文档中第一个<p>
var text = para.textContent;    //文本是“This is a simple document.”
para.textContent = "Hello";   //修改段落内容

创建、插入和删除节点

创建节点

var newNode = document.createTextNode("text node content");

每个节点有一个cloneNode()方法来返回该节点的一个全新副本。

插入节点

一旦有一个新节点,就可以用Node的方法appendChild()或insertBefore()将它插入到文档中。

删除和替换节点

  • removeChild()方法是从文档树中删除一个节点。在父节点上调用该方法,并将需要删除的子节点作为方法参数传递给它。
//删除n节点
n.parentNode.removeChild(n);
  • replaceChild()方法删除一个子节点并用一个新的节点取而代之。父节点上调用,第一个参数是新节点,第二个参数是需要代替的节点
//用一个文本字符串来替换节点n
n.parentNode.replaceChild(document.createTextNode("[REDACTED]",n);

使用DocumentFragment

DocumentFragment是一种特殊的Node,它作为其他节点的一个临时的容器。

//创建一个DocumentFragment
var frag = document.createDocumentFragment();

DocumentFragment是独立的。它的parentNode总是为null,但是他可以有任意多的子节点,可以用appendChild()和insertBefore()等方法来操作它们。


文档和元素的几何形状和滚动

文档坐标和视口坐标

为了在坐标系之间互相转换,我们需要判定浏览器窗口的滚动条的位置。window对象的pageXOffset和pageYOffset属性在所有的浏览器中提供这些值。

查询窗口的视口尺寸

查询元素的几何尺寸

var box = e.getBoundingClientRect();  //获得在视口坐标中的位置
var offsets = getScrollOffsets();  //上面定义的工具函数
var x = box.left + offsets.x; //转化为文档坐标
var y = box.top + offsets.y;

HTML表单

表单元素1
表单元素2

选取表单和表单元素

//name = "address"属性的<form>可以用以下任何方法来获取
document.address  //仅当表单有name属性时可用
document.forms.address  //显式访问有name或id的表单
//如果名为“address”的表单的第一个元素的name是“street”,可以使用以下任何一种方式来引用该元素
document.forms.address[0]
document.forms.address.street
document.address.street  //当有name=“address”,而不是只有id="address"
document.forms.address.elements.street
//如果要明确的选取一个表单元素,可以索引表单对象的elements属性
document.forms.address.elements[0]
document.forms.address.elements.street

表单和元素的属性

  • type:标识表单元素类型的只读的字符串。
  • form:对包含元素的Form对象的只读引用。
  • name:只读的字符串,由HTML属性name指定。
  • value:可读/写的字符串,指定了表单元素包含或代表的“值”。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • DOM概览 文档对象模型是表示和操作HTML和XML文档内容的基础API。 Document和Element是两个...
    亮亮叔家的小笔笔阅读 4,468评论 0 0
  • DOM概览 上图的每个方框是文档的一个节点,它表示一个Node对象。 选择文档元素 获取文档的一个或多个元素有如下...
    kissLife阅读 3,856评论 0 0
  • 一、JS前言 (1)认识JS 也许你已经了解HTML标记(也称为结构),知道了CSS样式(也称为表示),会使用HT...
    凛0_0阅读 7,739评论 0 8
  • 将对象封装在类似中介的类中,对象之间的通信他们本身不用关心 mediator.h #ifndef _MEDIATO...
    老练子丶2017阅读 2,924评论 0 0
  • 梦想,陪着我们成长,它可以支撑起一却,给我们动力。梦想,多么伟大的两个字啊!为了它,人们献出了汗水,并且努力的奋斗...
    菀馨WanXin阅读 2,823评论 0 1