【Javascript】Javascript高级程序设计:dom 随手笔记

本文详细介绍了DOM元素的类型(如Node、document、Element和Text),以及各种常见的DOM操作,如选择器、元素遍历、类名操作、焦点管理、HTMLDocument变化、自定义数据属性、插入方法(innerHTML和outerHTML)、滚动区域管理等,同时涵盖了元素属性和样式计算。


一、dom 元素类型

1.1 Node

1.js 所有的节点类型都继承自 Node 类型

2.Node.nodeName 返回节点标签名

3.每个 node 都有 node.childNodes 属性,返回 NodeList 对象。NodeList 并不是 Array 的实例,而是基于 DOM 的动态查询结果,添加、删除节点能动态地反映到 NodeList 中(无论nodeList是否在修改html之前改变,都会反映)。NodeList 支持索引访问,有 length 属性

4.parentNode、firstChild、lastChild、previousSibling、nextSibling、hasChildNodes()

5.添加节点:appendChild,添加到节点尾,并返回新增节点
father.insertBefore(newNode, x),在 father 下,x 之前插入节点。如果 x 为 null,相当于 appendChild

6.替换节点:father.replaceChild(newNode, oldNode)

7.删除节点:father.removeChild(node)

8.克隆节点:node.cloneNode(d)。d 为 true,深拷贝,复制包括所有子孙节点。为 false,仅复制本身


1.2 document

1.document.URL,获取页面 url

2.document.domain,页面域名

3.查找元素
document.querySelector
document.getElementByID
document.getElementByTagName
document.getElementByClassName
复数形式:
document.querySelectorAll
document.getElementsByID
document.getElementsByTagName
document.getElementsByClassName
特殊:
document.getElementsByName 通过 name 属性查找,只能查找多个

4.创建元素
document.createElement(html_tag)


1.3 Element

getAttribute
setAttribute
removeAttribute


1.4 Text

parentNode 是 Element
不太重要,操作可由上述类型代替
作用:
动态添加 js 语句到 html 中执行

// 动态加载js文件
var script = document.createElement("script");
script.type = "text/javascript";
script.src = url;
document.body.appendChild(script);
<!-- 动态添加 js 代码 -->
<script type="text/javascript">
	var script = document.createElement("script");
	script.type = "text/javascript";
	script.text = 'function sayHi() {alert("hi");}';
	document.body.appendChild(script);
</script>

还可以动态地创建 css 的 style 标签


二、dom 操作

2.1 querySelector、querySelectorAll

接收 css 选择器,关于 css 选择器语法,不多赘述,自行搜索


2.2 元素遍历

element.childElementCount 。子元素个数(不包含文本节点和注释)
element.firstElementChild 。箱一个子元素
element.lastElementChild
element.previousElementSibling 。前一个同辈元素
element.nextElementSibling

2.3 classList 操作

用于操作类名
add
contains
remove
toggle

例:

div.classList.remove("user");
div.classList.add("current");
div.classList.contains("bd");
div.classList.toggle("current");	// 切换 current 类

2.4 焦点管理

document.activeElement 获取当前焦点元素
document.hasFocus() 当前页面是否获得焦点
例:

var btn = document.querySelector("button");
btn.focus();
console.log(document.activeElement === btn);	// true

2.5 HTMLDocument 变化

readyState 属性

该属性有两个值:loading、complete

2.6 自定义数据属性

前缀为 date- 的为自定义属性
定义后,可以通过 dataset 属性来访问自定义属性的值
例:

<div data-myname="zhuyi"></div>
var div = document.querySelector("div");
var name = div.dateset.myname;	// name = zhuyi

2.7 插入标记

2.7.1 innerHTML

可读可写属性,返回内部 html,string 类型

2.7.2 outerHTML

可读可写,包含当前元素的 html,string 类型
写模式下,会替换掉当前元素


2.8 scrollIntoView

可以在所有 html 元素上调用,参数为 true,滚动元素到与顶部平齐,为 false,滚动元素到页面中部


三、扩展属性

3.1 children 属性

children 与之前说过的 childNodes 区别是,children 会包含注释。但这个区别只在 IE9之前有,IE9版本浏览器后,只返回元素节点,两者并无区别

3.2 innerText

返回元素的文档树中的文本,包括子文档树的文本,可读可写

写模式下,会删除内部的文档树节点,替换为文本


四、dom 操作元素属性(重)

4.1 访问元素样式

1.通过 js 访问元素样式时,若 css 属性名为短划线命名法,则 js 中要替换为小驼峰命名法

<!-- 例 -->
<div background-image="aaa.jpg"></div>
<script type="text/javascript">
	var div = document.querySelector("div");
	div.backgroundImage = "xxx.jpg";	// 换为小驼峰
</script>

多数情况下,换小驼峰可访问 css 属性。但 float 属性例外,float 是 js 的保留字,不能作属性命,而改为div.cssFloat
Firefox、Safari、Opera、Chrome 都支持这个属性,而万恶的 IE 浏览器支持的是 div.styleFloat

4.2 元素大小

4.2.1 偏移量(offset)

在这里插入图片描述

概念
偏移量:包括元素在屏幕上所占用的所有可见空间,包括高度、宽度、内边距、滚动条、边框大小,不包括外边距
有四个属性:

  1. offsetHeight:元素在垂直方向占用的空间大小。包括高(可见高度)、水平滚动条、上下边框
  2. offsetWidth: 宽(可见)、竖直滚动条、左右边框
  3. offsetLeft: 元素左边框至包含元素(有定位)的左边框之间的像素距离
  4. offsetTop:~同上

offsetHeight 和 offsetWidth,无非是 width、height、padding、border,再加滚动条,即 css 盒子模型把 margin 替换为 滚动条

offsetTop、offsetLeft:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Document</title>
    <style>
        * {
            margin: 0;
        }
        div {
            width: 200px;
            height: 200px;
        }

        div.outer {
            padding: 100px;
            width: 600px;
            height: 600px;
            background-color: yellow;
        }
    </style>
</head>
<body>
    <div id="first" style="background-color: red;"></div>
    <div class="outer">
        <div id="last" style="background-color: blue;"></div>
    </div>

    <script>
        var div = document.querySelector("#last");
        console.log(div.offsetTop);
    </script>
</body>
</html>

在这里插入图片描述
当我们给 div.outer 添加定位后
在这里插入图片描述


4.2.2 客户区(client)

包含两个属性

  • clientHeight
  • clientWidth

包括:宽高、padding、border

所以:
client + 滚动条 = offset 偏移量
client + margin = box 盒子模型
offset 偏移量 - 滚动条 + margin = 盒子模型


4.2.3 滚动区(scroll)

包含四个属性

  • scrollHeight。没有滚动条时,元素内容总高度
  • scrollWidth
  • scrollLeft。有滚动条时,被隐藏的左边
  • scrollTop

在这里插入图片描述

第一部分 深入理解DOM脚本编程  第1章 遵循最佳实践    1.1 不唐突和渐进增强    1.2 让JavaScript运行起来     1.2.1 把行为从结构中分离出来     1.2.2 不要版本检测     1.2.3 通过平稳退化保证可访问性     1.2.4 为重用命名空间而进行规划     1.2.5 通过可重用的对象把事情简化     1.2.6 一定要自己动手写代码    1.3 JavaScript语法中常见的陷阱     1.3.1 区分大小写     1.3.2 单引号与双引号      1.3.3 换行     1.3.4 可选的分号和花括号     1.3.5 重载(并非真正的重载)     1.3.6 匿名函数     1.3.7 作用域解析和闭包     1.3.8 迭代对象     1.3.9 函数的调用和引用(不带括号)    1.4 实例:WYSIWYGJavaScript翻转图    1.5 小结   第2章 创建可重用的对象    2.1 对象中包含什么     2.1.1 继承     2.1.2 理解对象成员     2.1.3 window对象中的一切     2.1.4 理解作用域和闭包是根本    2.2 创建你自己的对象     2.2.1 一变多:创建构造函数     2.2.2 添加静态方法     2.2.3 向原型中添加公有方法     2.2.4 公有、私有、特权和静态成员真那么重要吗     2.2.5 对象字面量    2.3 this是什么    2.4 try{}、catch{}和异常处理    2.5 实例:你自己的调试日志     2.5.1 为什么需要JavaScript日志对象     2.5.2 myLogger()对象    2.6 小结   第3章 DOM2核心和DOM2 HTML    3.1 DOM不是JavaScript,它是文档    3.2 DOM的级别     3.2.1 DOM 0 级     3.2.2 DOM 1 级     3.2.3 DOM 2 级     3.2.4 DOM 3 级     3.2.5 哪个级别适合你    3.3 创建示例文档     3.3.1 创建DOM文件     3.3.2 选择一个浏览器   3.4 DOM核心     3.4.1 继承在DOM中的重要性     3.4.2 核心Node对象     3.4.3 核心Element对象     3.4.4 核心Document对象     3.4.5 遍历和迭代DOM树    3.5 DOM HTML     3.5.1 DOM2 HTML 的HTMLDocument对象     3.5.2 DOM2 HTML 的HTMLElement对象    3.6 实例:将手工HTML代码转换为DOM代码     3.6.1 DOM生成工具的HTML文件     3.6.2 使用示例HTML片段进行测试     3.6.3 扩充ADS库     3.6.4 generateDOM对象的框架    3.7 小结   第4章 响应用户操作和事件    4.1 DOM2级事件    4.2 事件的类型     4.2.1 对象事件     4.2.2 鼠标移动事件     4.2.3 鼠标单击事件     4.2.4 键盘事件     4.2.5 表单相关的事件     4.2.6 针对W3C DOM的事件     4.2.7 自定义事件    4.3 控制事件流和注册事件侦听器     4.3.1 事件流     4.3.2 注册事件     4.3.3 在事件侦听器中访问事件对象     4.3.4 跨浏览器的事件属性和方法    4.4 小结   第5章 动态修改样式和层叠样式表    5.1 W3CDOM2样式规范     5.1.1 CSSStyleSheet对象     5.1.2 CSSStyleRule对象     5.1.3 CSSStyleDeclaration对象     5.1.4 支持的匮乏    5.2 当DOM 脚本遇到样式    5.3 把样式置于DOM脚本之外     5.3.1 style属性     5.3.2 基于className切换样式     5.3.3 切换样式表     5.3.4 修改CSS规则    5.4 访问计算样式    5.5 Microsoft的filter属性    5.6 实例:简单的渐变效果    5.7 小结   第6章 案例研究:图像裁剪和缩放工具    6.1 测试文件    6.2 imageEditor对象     6.2.1 调用imageEditor工具     6.2.2 imageEditor载入事件     6.2.3 创建编辑器标记和对象     6.2.4 向imageEditor对象添加事件侦听器     6.2.5 缩放图像     6.2.6 裁剪图像     6.2.7 未完成的图像编辑器    6.3 小结  第二部分 浏览器外部通信  第7章 向应用程序中加入Ajax    7.1 组合的技术     7.1.1 语义化XHTML和DOM     7.1.2 JavaScript和XMLHttpRequest对象     7.1.3 XML     7.1.4 一个可重用的对象     7.1.5 Ajax是正确的选择吗    7.2 为什么Ajax会破坏网站及如何解决     7.2.1 依赖JavaScript生成内容     7.2.2 通过script标签绕过跨站点限制     7.2.3 后退按钮和书签功能     7.2.4 完成请求的赛跑     7.2.5 增加资源占用     7.2.6 问题解决了吗    7.3 实例:Ajax增强的相册    7.4 小结   第8章 案例研究:实现带进度条的异步文件上传功能    8.1 信息载入时的小生命    8.2 起点    8.3 完成整合:上传进度指示器     8.3.1 addProgressBar()对象的结构     8.3.2 载入事件     8.3.3 addProgressBar()对象    8.4 小结  第三部分 部分高级脚本编程资源  第9章 通过库来提高生产力    9.1 选择合适的库    9.2 增强DOM操作能力     9.2.1 连缀语法     9.2.2 通过回调函数进行过滤     9.2.3 操纵DOM文档    9.3 处理事件     9.3.1 注册事件     9.3.2 自定义事件    9.4 访问和操纵样式    9.5 通信    9.6 小结   第10章 添加效果增强用户体验    10.1 自己动手实现效果     10.1.1 让我看到内容     10.1.2 提供反馈    10.2 几个视觉效果库简介    10.3 视觉盛宴     10.3.1 MOO式的CSS属性修改     10.3.2 通过Script.aculo.us实现视觉效果     10.3.3 通过Moo.fx实现逼真的运动效果     10.3.4 圆角效果     10.3.5 其他库    10.4 行为增强    10.5 小结   第11章 丰富的Mashup!运用API添加地图、搜索及更多功能    11.1 API密钥    11.2 客户端API:离不开JavaScript     11.2.1 地图中的Mashup应用     11.2.2 Ajax搜索请求     11.2.3 地图与搜索的Mashup应用    11.3 服务器端API:需要代理脚本     11.3.1 通过Basecamp构建集成的To-Do列表     11.3.2 通过Flickr取得个性头像    11.4 小结   第12章 案例研究:用DOM设计选择列表    12.1 经典的感觉    12.2 构建更好的选择列表    12.3 策略?我们不需要臭哄哄的策略     12.3.1 相关的文件     12.3.2 FauxSelect对象     12.3.3 开始创建人造select元素     12.3.4 查找select元素     12.3.5 构建DOM元素    12.4 添加事件——为人造select赋予生命    12.5 让表单绽放光彩    12.6 行为修正     12.6.1 z-index来救急     12.6.2 键盘控制及其他细节     12.6.3 select太大了吗    12.7 最后的细节    12.8 继续替换select的冒险    12.9 小结
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

竹一笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值