学习笔记二|脚本化文档

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:可读/写的字符串,指定了表单元素包含或代表的“值”。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容

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