常用DOM

108 阅读5分钟

目录

获取DOM节点

通过ID查找节点

通过标签名查找节点

通过类名查找节点

通过CSS选择器查找单个节点

通过CSS选择器查找所有节点

通过关系获取节点

获取下一个兄弟节点

获取上一个兄弟节点

获取所有子节点(元素节点)

获取父级节点

创建、删除、替换和克隆节点

创建节点

删除节点(自删除)

删除子节点

替换节点

克隆节点

操作节点属性

设置属性

获取属性

删除属性

类名操作

直接设置类名(会覆盖原有的类名)

使用classList操作类名

向标签内部写入内容

写入文本

事件处理

基本事件

阻止事件冒泡

阻止默认行为

输入框事件

键盘事件

绑定事件(不推荐,因为无法绑定多个事件处理器)

事件监听(推荐方式)

移除事件监听


获取DOM节点

  1. 通过ID查找节点

    let element = document.getElementById('elementId');
    

  2. 通过标签名查找节点

    let elements = document.getElementsByTagName('tagName'); // 返回HTMLCollection
    

  3. 通过类名查找节点

    let elements = document.getElementsByClassName('className'); 
    // 返回HTMLCollection
    

  4. 通过CSS选择器查找单个节点

    let element = document.querySelector('.className #elementId'); 
    // 返回第一个匹配的元素
    

  5. 通过CSS选择器查找所有节点

    let elements = document.querySelectorAll('.className, #elementId'); 
    // 返回NodeList
    

通过关系获取节点

  1. 获取下一个兄弟节点

    let nextSibling = element.nextElementSibling;
    

  2. 获取上一个兄弟节点

    let prevSibling = element.previousElementSibling;
    

  3. 获取所有子节点(元素节点)

    let children = element.children; // 返回HTMLCollection,只包含元素节点
    

  4. 获取父级节点

    let parent = element.parentNode; 
    //如果需要父元素节点,可以使用element.parentElement
    

创建、删除、替换和克隆节点

  1. 创建节点

    let newElement = document.createElement('tagName');
    

  2. 删除节点(自删除)

    element.remove();
    

  3. 删除子节点

    parentElement.removeChild(childNode);
    

  4. 替换节点

    parentElement.replaceChild(newNode, oldNode);
    

  5. 克隆节点

    let clonedNode = originalNode.cloneNode(true); 
    // true表示深拷贝,false表示浅拷贝
    

操作节点属性

  1. 设置属性

    element.setAttribute('attributeName', 'value');
    

  2. 获取属性

    let value = element.getAttribute('attributeName');
    

  3. 删除属性

    element.removeAttribute('attributeName');
    

类名操作

  1. 直接设置类名(会覆盖原有的类名)

    element.className = 'newClassName';
    

  2. 使用classList操作类名

    element.classList.add('className'); // 添加
    element.classList.remove('className'); // 删除
    element.classList.toggle('className'); // 切换
    let hasClass = element.classList.contains('className'); // 判断是否存在
    

向标签内部写入内容

  1. 写入文本

    element.innerText = 'text'; // 不会解析HTML
    element.textContent = 'text'; // 与innerText类似,但兼容性更好
    

  2. 写入文本或标签

    element.innerHTML = '<p>HTML content</p>'; // 会解析HTML
    

事件处理

  1. 基本事件

    element.onclick = function() { /* code */ };
    element.onmouseenter = function() { /* code */ };
    element.onmouseleave = function() { /* code */ };
    element.onmousemove = function() { /* code */ };
    

  2. 阻止事件冒泡

    event.stopPropagation();
    

  3. 阻止默认行为

    event.preventDefault();
    

  4. 输入框事件

    inputElement.onblur = function() { /* code when element loses focus */ };
    inputElement.onfocus = function() { /* code when element gains focus */ };
    inputElement.oninput = function() { /* code when input value changes */ };
    inputElement.onchange = function() { 
    /* code when input value is committed (e.g., after losing focus and value has changed) */ 
    };
    

  5. 键盘事件

    element.onkeydown = function(event) { 
    /* code; event.keyCode is deprecated, use event.key or event.code */ 
    };
    element.onkeyup = function(event) { /* code */ };
    

  6. 绑定事件(不推荐,因为无法绑定多个事件处理器)

    element.onclick = function() { /* code */ };
    

  7. 事件监听(推荐方式)

    element.addEventListener('click', function(event) { /* code */ });
    element.addEventListener('mouseenter', function(event) { /* code */ }, false); 
    // 第三个参数为捕获阶段(可选,默认为false,即冒泡阶段)
    

  8. 移除事件监听

    element.removeEventListener('click', functionReference); 
    // 必须传递与添加时相同的函数引用
    

注意:event.keyCode 在现代浏览器中已被弃用,建议使用 event.key 或 event.code 来获取键盘事件的键值。同时,当使用 addEventListener 和 removeEventListener 时,传递给 removeEventListener 的函数必须与传递给 addEventListener 的函数完全相同(通常是同一个函数引用)。如果传递的是匿名函数,则无法正确移除事件监听器。