DOM是浏览器提供的HTML对象树接口,非JS原生;推荐用querySelector系列获取元素;更新内容优先用textContent防XSS;修改样式用el.style而非setAttribute;事件绑定必须用addEventListener并注意解绑与委托。

DOM 是浏览器把 HTML 转成的对象树,不是 JS 自带的
DOM(Document Object Model)不是 JavaScript 语言的一部分,而是浏览器提供的编程接口。HTML 文档被加载后,浏览器会解析它,生成一棵节点树——每个 别再无脑用 内联事件(如 动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包 立即学习“Java免费学习笔记(深入)”; DOM 操作看着简单,但真正稳定可靠的关键,在于理解「什么时候节点还没就绪」「哪些 API 返回的是实时集合」「事件绑定后有没有内存泄漏风险」——这些细节不踩一两次坑,很难有体感。、甚至文本和注释,都变成一个对象(比如 HTMLElement 或 Text),挂载在全局 document 对象下。JS 通过操作这棵树来改变页面内容、结构或样式。用
document.querySelector 和 document.querySelectorAll 找元素最稳妥getElementById 或 getElementsByClassName 了——它们返回的是“活的”集合(HTMLCollection),容易因 DOM 变动引发意外;而 querySelector 系列返回的是快照(Element 或静态 NodeList),行为更可预测。
document.querySelector('.btn') 返回第一个匹配的元素,没找到就返回 null(注意判空)document.querySelectorAll('input[name="email"]') 返回所有匹配的元素,结果是只读的 NodeList,不能直接用 .push(),但能用 forEach
document.querySelector('button:disabled') 合法div#app > section.main ul li a[href^="/post"] —— 维护性差,也容易因 DOM 微调而断裂修改元素内容别只记得
innerHTML,小心 XSS 和性能innerHTML 看似方便,但它会触发 HTML 解析、重建子节点,开销大;更重要的是,如果插入用户输入的内容(比如表单值),不转义就直接拼进去,等于打开 XSS 漏洞。
textContent:el.textContent = 'Hello ' 会原样显示,不会执行脚本innerHTML;否则先用 DOMPurify.sanitize(htmlStr) 过滤innerHTML。用 document.createDocumentFragment() 先组装,再一次性 appendChild
el.style.color = 'red' 比 el.setAttribute('style', 'color:red;') 更安全、更易维护事件绑定要用
addEventListener,别写 onclick=...
)把结构和逻辑耦合死,无法动态控制,也不支持事件捕获、不支持多次绑定同一事件类型。现代写法必须用 addEventListener。
addEventListener('click', fn1) 和 addEventListener('click', fn2),互不影响el.addEventListener('click', handler) → el.removeEventListener('click', handler);用匿名函数就永远解不掉event.target 判断实际点击元素:listEl.addEventListener('click', e => { if (e.target.matches('li.delete-btn')) { /* ... */ } })
e.preventDefault() 就得调,别漏const form = document.querySelector('#search-form');
form.addEventListener('submit', function(e) {
e.preventDefault(); // 阻止页面刷新
const query = document.querySelector('#q').value.trim();
if (!query) return;
fetch(`/api/search?q=${encodeURIComponent(query)}`)
.then(r => r.json())
.then(data => {
const list = document.querySelector('#results');
list.innerHTML = data.map(item =>
`










