JavaScript 文档对象(Document)核心属性实战解析
在 Web 开发中,document 对象是 DOM 的根节点,也是操作 HTML 文档的核心接口。通过它,我们可以访问和修改页面的结构、内容与样式,实现动态更新、表单验证及用户交互响应。其丰富的属性不仅涵盖文档的基本元数据,还提供了对页面元素集合的直接访问,是现代前端开发和单页应用(SPA)不可或缺的基础。
随着 Web 标准的演进,document 也在不断扩展,支持 Shadow DOM、MutationObserver 等新特性。未来它将更注重性能优化与安全性。下面,我们结合实战场景,逐一分析 document 对象常见的 60 个关键属性。
文档元数据与位置
document.title
用于获取或设置当前文档的标题,即浏览器标签页上显示的文字。
console.log(document.title); // 获取当前标题
document.title = '新标题'; // 设置新标题
注意:设置时会覆盖 <title> 标签内容,但不会直接修改 DOM 树中的节点值,只是同步显示。
document.URL
返回当前文档的完整 URL 地址(只读),包含协议、主机、路径等。
let currentUrl = document.URL;
// 假设输出:https://example.com/page?id=1#section
不可写,尝试赋值无效。
document.domain
获取或设置当前文档的域名,主要用于同源策略下的跨子域通信。
console.log(document.domain); // 例如:'www.example.com'
document.domain = 'example.com'; // 需设置为更高级别的相同后缀
现代浏览器对此限制严格,通常只能设为父域,且不能设为顶级域名。
document.referrer
返回链接到当前页面的来源页面 URL(只读)。若直接打开页面则返回空字符串。
console.log(document.referrer); // 例如:'https://www.google.com/'
document.cookie
获取或设置与当前文档关联的 HTTP Cookie。
// 读取所有 cookie
let allCookies = document.cookie;
// 写入新 cookie (追加或修改)
document.cookie = "language=zh-CN; path=/";
写入时需注意格式,包括过期时间、路径等参数。
文档元素集合
document.body & document.head
分别返回 <body> 和 <head> 元素对象。
document.body.style.backgroundColor = 'lightblue';
console.log(document.head.innerHTML);
document.forms, images, links, scripts
返回对应类型元素的集合(HTMLCollection),可通过索引或 name 属性访问。
let firstForm = document.forms[0];
let loginForm = document.forms['loginForm'];
console.log(document.images.length); // 图片总数
for (let img of document.images) {
console.log(img.src);
}
document.anchors
返回带有 name 属性的 <a> 元素集合。现代 HTML5 推荐使用 id,此集合在现代页面中可能为空。
文档结构与视图
document.doctype
返回文档类型声明对象(如 <!DOCTYPE html>),无声明则返回 null。
console.log(document.doctype.name); // 输出:'html'
document.documentElement
返回根元素 <html>,常用于获取视口高度等。
let fullPageHeight = document.documentElement.scrollHeight;
document.defaultView
返回关联的 window 对象,在 iframe 中可用于获取内部全局对象。
let isChrome = document.defaultView.navigator.userAgent.includes('Chrome');
document.activeElement
返回当前获得焦点的元素,常用于表单验证。
if (document.activeElement.id === 'username') {
console.log('用户正在输入用户名');
}
document.baseURI
返回文档的绝对基础 URL,由页面 URL 和 <base> 标签决定。
编码与状态
document.characterSet
返回文档字符编码(如 UTF-8),charset 是其别名。
console.log(document.characterSet); // 输出:'UTF-8'
document.readyState
返回加载状态:loading(加载中)、interactive(DOM 解析完成)、complete(完全加载)。
if (document.readyState === 'complete') {
console.log('页面完全加载好了');
}
文件信息与遗留属性
*注意:以下部分属性为非标准或已废弃,主要见于旧版 IE,现代开发建议避免使用。
document.lastModified
返回文档最后修改日期字符串。
console.log('本页面最后更新于:' + document.lastModified);
document.bgColor / fgColor / linkColor 等
这些颜色属性已废弃,应使用 CSS 控制(如 document.body.style.backgroundColor)。
集合与扩展
document.all
非标准属性,曾广泛用于 IE,现代浏览器为兼容保留。建议使用 querySelectorAll('*') 替代。
document.location
返回 Location 对象,可导航或跳转。
console.log(document.location.hostname);
document.location.href = 'https://example.com';
节点导航与关系属性
document.firstChild / lastChild / childNodes
返回文档节点的子节点(NodeList),包含文本、注释等,不限于元素。
for (let node of document.childNodes) {
console.log(node.nodeType, node.nodeName);
}
document.firstElementChild / children
仅返回元素节点,忽略文本和注释。
console.log(document.firstElementChild.tagName); // 输出:'HTML'
document.nodeName / nodeType
Document 节点名称固定为 #document,类型为 9。
文档事件与处理程序
虽然常用 addEventListener,但以下属性也可绑定事件处理函数:
- onload: 文档加载完成。
- onreadystatechange: 监听加载状态变化。
- onscroll: 滚动事件。
- onclick: 点击事件。
- onkeydown: 键盘按下。
- oncopy: 复制事件。
示例:
document.onclick = function(e) {
console.log('点击了:' + e.target.tagName);
};
文档兼容性与视图
document.compatMode
返回渲染模式:CSS1Compat(标准模式)或 BackCompat(怪异模式)。
document.hidden / visibilityState
用于页面可见性 API,检测页面是否在后台。
if (document.hidden) {
console.log('用户切换到了其他标签页');
}
document.designMode / execCommand
控制整个文档是否可编辑,类似富文本编辑器。
document.designMode = 'on';
document.execCommand('bold', false, null);
文档集合与特殊属性
document.styleSheets
返回所有样式表对象列表,可动态操作 CSS 规则。
document.fonts
FontFaceSet 对象,用于检查字体加载状态。
document.fonts.ready.then(() => {
console.log('所有字体加载完成');
});
document.currentScript
返回当前正在执行的 <script> 元素,适用于动态脚本。
document.fullscreenElement
返回当前全屏模式的元素,若无则为 null。
总结列表
| 属性 | 含义 | 备注 |
|---|---|---|
| document.title | 文档标题 | 可读可写 |
| document.URL | 完整 URL | 只读 |
| document.domain | 域名 | 跨子域通信用 |
| document.cookie | Cookie 字符串 | 读写需谨慎 |
| document.body | body 元素 | 常用操作入口 |
| document.forms | 表单集合 | HTMLCollection |
| document.images | 图片集合 | 遍历统计用 |
| document.links | 链接集合 | 含 href 的 a/area |
| document.doctype | 文档类型 | DocumentType 对象 |
| document.documentElement | html 根元素 | 标准根节点 |
| document.activeElement | 焦点元素 | 表单验证有用 |
| document.readyState | 加载状态 | loading/interactive/complete |
| document.lastModified | 最后修改时间 | 字符串格式 |
| document.all | 所有元素 | 非标准,不推荐 |
| document.location | 位置对象 | 可跳转 |
| document.children | 子元素集合 | 忽略文本/注释 |
| document.nodeName | 节点名称 | 总是 #document |
| document.nodeType | 节点类型 | 文档节点为 9 |
| document.compatMode | 渲染模式 | CSS1Compat/BackCompat |
| document.hidden | 隐藏状态 | 布尔值 |
| document.designMode | 设计模式 | on/off |
| document.styleSheets | 样式表列表 | StyleSheetList |
| document.fonts | 字体集 | FontFaceSet |
| document.currentScript | 当前脚本 | 执行期间有效 |
| document.fullscreenElement | 全屏元素 | 全屏 API |
掌握这些属性能帮助你更高效地操控页面。在实际开发中,优先选择标准属性,关注兼容性提示,并善用现代 API(如 querySelector)替代老旧方法。


