自学内容网 自学内容网

Dom的学习

DOM(文档对象模型,Document Object Model)是一个编程接口,用于HTML和XML文档。它将文档表示为一个树形结构,其中每个节点都是文档的一部分,例如元素、属性和文本内容。通过DOM,开发者可以使用编程语言(如JavaScript)来动态访问和更新文档的内容、结构和样式。

示例:

<!DOCTYPE html>
<html>
<head>
    <title>示例</title>
</head>
<body>
    <h1>欢迎</h1>
    <p>这是一个示例文档。</p>
</body>
</html>

在DOM中,这个文档的结构可以表示为: 

一、查找 

 1、getElementById()
getElementById()通过id获取元素 获取符合条件的第一个对象

例如:

<body>
    <div id="aaa">点击我</div>
    <div id="aa">点击我也可以</div>
</body>

js

window.onload = function() {
    var obja = document.getElementById("aaa");
    console.log(obja);
    if (obja) { // 检查 obja 是否为 null
        obja.onclick = function() {
            alert("Element aaa clicked!");
        };
    }
    
    var objb = document.getElementById("aa");
    console.log(objb);
    if (objb) { // 检查 objb 是否为 null
        objb.onclick = function() {
            alert("Element aa clicked!");
        };
    }
};

2、getElementsByClassName()
getElementsByClassName("aa")
 根据元素名称查找  找到所有符合条件的对象组成的数组
    <div class="aa">点击我 1</div>
    <div class="aa">点击我 2</div>
    <div class="aa">点击我 3</div>
js
window.onload = function() {
    // 获取所有具有类名 "aa" 的元素
    var elements = document.getElementsByClassName("aa");
    console.log(elements); 
    for (let i = 0; i < elements.length; i++) {
        elements[i].onclick = function() {
        console.log("Element " + (i + 1) + " clicked!"); 
    };
}
};

3、getElementsByTagName()
根据元素名称查找  找到所有符合条件的对象组成的数组
var arr = document.getElementsByTagName("div")
    <div>这是第一个 DIV</div>
    <div>这是第二个 DIV</div>
    <div>这是第三个 DIV</div>
js
window.onload = function() {
    // 获取所有具有类名 "aa" 的元素
    var elements = document.getElementsByTagName("div");
    console.log(elements); 
    for (let i = 0; i < elements.length; i++) {
        elements[i].onclick = function() {
        console.log("Element " + (i + 1) + " clicked!"); 
    };
}
};

4、querySelector()
根据元素选择器查找 querySelector()获取符合条件的第一个对象
var obj = document.querySelector(".aa")
    <div class="aa">第一个符合条件的对象</div>
    <div class="aa">第二个符合条件的对象</div>
    <div class="bb">另一个对象</div>
js
window.onload = function() {
    // 使用 querySelector 获取第一个具有类名 "aa" 的元素
    var obj = document.querySelector(".aa");
        
    // 检查 obj 是否存在
    if (obj) {
        console.log("找到的对象内容: " + obj.textContent);
        // 可以对找到的元素进行操作,例如修改样式
        obj.style.backgroundColor = "yellow"; // 给找到的对象添加背景色
    } else {
        console.log("没有找到符合条件的对象");
    }
}

5、 querySelectorAll()
根据元素选择器查找 querySelectorAll()找到所有符合条件的对象组成的数组
var arr = document.querySelectorAll(".aa")
    <div class="aa">第一个符合条件的对象</div>
    <div class="aa">第二个符合条件的对象</div>
    <div class="bb">另一个对象</div>
    <div class="aa">第三个符合条件的对象</div>
js
window.onload = function() {
    // 使用 querySelectorAll 获取所有具有类名 "aa" 的元素
    var arr = document.querySelectorAll(".aa");
        
    // 遍历 NodeList 并输出每个元素的内容
    arr.forEach(function(element) {
        console.log("找到的对象内容: " + element.textContent);
    });
}

二、通过关系查找 

1、找父亲 parentNode   parentElement
<div class="parent">
        <div class="child">这是子元素</div>
    </div>
js
window.onload = function() {
    // 获取子元素
    var childElement = document.querySelector(".child");
    // 使用 parentNode 获取父节点
    var parentNode = childElement.parentNode;
    console.log("parentNode: ", parentNode); // 输出父节点
    // 使用 parentElement 获取父元素
    var parentElement = childElement.parentElement;
    console.log("parentElement: ", parentElement); // 输出父元素
    // 检查 parentNode 和 parentElement 是否相同
    if (parentNode === parentElement) {
        console.log("parentNode 和 parentElement 是相同的节点。");
    } else {
        console.log("parentNode 和 parentElement 是不同的节点。");
    }
}

2、找孩子 childNodes  children 
<div class="parent">
        <div class="child">这是子元素1</div>
        <div class="child">这是子元素2</div>
    </div>
js
window.onload = function() {
     // 获取父元素
     var parentElement = document.querySelector(".parent");

     // 使用 childNodes 获取所有子节点
     var allChildNodes = parentElement.childNodes;
     console.log("所有子节点 (childNodes):");
     allChildNodes.forEach(function(node) {
         console.log(node); // 打印每个子节点
     });

     // 使用 children 获取元素子节点
     var elementChildren = parentElement.children;
     console.log("所有子元素 (children):");
     Array.from(elementChildren).forEach(function(child) {
         console.log(child); // 打印每个子元素
     });
}

 3、第一个孩子 firstChild firstElementChild
<div class="parent">
        <div class="child">这是子元素1</div>
        <div class="child">这是子元素2</div>
    </div>
js
window.onload = function() {
     // 获取父元素
     var parentElement = document.querySelector(".parent");

     // 使用 firstChild 获取第一个子节点
     var firstChild = parentElement.firstChild;
     console.log("第一个子节点 (firstChild):", firstChild); // 输出第一个子节点(可能是文本节点或注释)

     // 使用 firstElementChild 获取第一个元素子节点
     var firstElementChild = parentElement.firstElementChild;
     console.log("第一个元素子节点 (firstElementChild):", firstElementChild); // 输出第一个元素子节点
}

4、最后一个孩子 lastChild  lastElementChild 
// 获取父元素
        var parentElement = document.querySelector(".parent");

        // 使用 lastChild 获取最后一个子节点
        var lastChild = parentElement.lastChild;
        console.log("最后一个子节点 (lastChild):", lastChild); // 可能是注释或文本节点

        // 使用 lastElementChild 获取最后一个元素子节点
        var lastElementChild = parentElement.lastElementChild;
        console.log("最后一个元素子节点 (lastElementChild):", lastElementChild); // 输出最后一个元素子节点

5、上一个元素 previousSibling  previousElementSibling
// 获取第三个元素
        var thirdElement = document.querySelector(".container .item:nth-child(3)");

        // 使用 previousSibling 获取上一个兄弟节点
        var previousSibling = thirdElement.previousSibling;
        if (previousSibling) {
            console.log("上一个兄弟节点 (previousSibling):", previousSibling);
            console.log("上一个兄弟节点的内容:", previousSibling.textContent || "没有内容");
        } else {
            console.log("没有上一个兄弟节点 (previousSibling)");
        }

        // 使用 previousElementSibling 获取上一个元素兄弟节点
        var previousElementSibling = thirdElement.previousElementSibling;
        if (previousElementSibling) {
            console.log("上一个元素兄弟节点 (previousElementSibling):", previousElementSibling);
            console.log("上一个元素兄弟节点的内容:", previousElementSibling.textContent);
        } else {
            console.log("没有上一个元素兄弟节点 (previousElementSibling)");
        }

6、下一个元素  nextSibling nextElementSibling
window.onload = function() {
    // 获取第二个元素
    var secondElement = document.querySelector(".container .item:nth-child(2)");

    // 使用 nextSibling 获取下一个兄弟节点
    var nextSibling = secondElement.nextSibling;
    if (nextSibling) {
        console.log("下一个兄弟节点 (nextSibling):", nextSibling);
    } else {
        console.log("没有下一个兄弟节点 (nextSibling)");
    }

    // 使用 nextElementSibling 获取下一个元素兄弟节点
    var nextElementSibling = secondElement.nextElementSibling;
    if (nextElementSibling) {
        console.log("下一个元素兄弟节点 (nextElementSibling):", nextElementSibling);
        console.log("下一个元素兄弟节点的内容:", nextElementSibling.textContent);
    } else {
        console.log("没有下一个元素兄弟节点 (nextElementSibling)");
    }
};

三、修改 

1、改内容  

 innerText以文本形式呈现   innerHTML解析成标签   value收集用户信息的标签

<div id="box">
        <div id="div1" class="mr"><p>萌萌</p></div>
        <div  id="div2" class="mr"><p>明明</p></div>
      </div>
js
window.onload = function() {
    const div1=document.getElementById('div1')
    const div2=document.getElementById('div2')
    console.log(div1.innerText)
    console.log(div2.innerHTML)

}

value 修改用户信息

 <h2>用户信息收集</h2>
    <form id="userInfoForm">
        <label for="name">姓名:</label>
        <input type="text" id="name" name="name" required><br><br>

        <label for="email">电子邮件:</label>
        <input type="email" id="email" name="email" required><br><br>

        <button type="submit">提交</button>
js
window.onload = function() {
    document.getElementById("userInfoForm").onsubmit = function(event) {
        event.preventDefault(); // 阻止默认提交行为

        // 收集用户输入的信息
        var name = document.getElementById("name").value;
        var email = document.getElementById("email").value;

        // 输出收集到的信息
        console.log("姓名:", name);
        console.log("电子邮件:", email);
    };
}

2、改属性

原生属性 对象.属性=值

<button id="myButton" class="old-class">点击我</button>
js
window.onload = function() {
     // 获取按钮元素
     var obj = document.getElementById("myButton");

     // 输出原来的 id
     console.log("原来的 id:", obj.id);

     // 改变 id 和 className
     obj.id = '77';
     obj.className = 'new-class';

     // 添加点击事件
     obj.onclick = function() {
         alert("按钮被点击了!");
     };

     // 输出新的 id 和 className
     console.log("新的 id:", obj.id);
     console.log("新的 className:", obj.className);
}

自定义属性

<div id="myDiv" data-fruit="banana">这是一个示例666</div>
js
 // 获取 div 元素
     var obj = document.getElementById("myDiv");

     // 获取自定义属性
     console.log("原来的自定义属性 data-fruit:", obj.getAttribute("data-fruit"));

     // 设置新的自定义属性
     obj.setAttribute("data-eat", "apple");

     // 输出更新后的自定义属性
     console.log("新的自定义属性 data-eat:", obj.getAttribute("data-eat"));

 

3、改样式
    <style>
        /* 初始样式 */
        #myDiv {
            width: 300px;
            height: 100px;
            border: 1px solid black;
            text-align: center;
            margin-bottom: 20px;
            line-height: 100px; /* 使文本垂直居中 */
        }
    </style>
</head>
<body>
    <div id="myDiv" data-fruit="banana">这是一个示例666</div>
</body>
利用js进行修改
// 获取 div 元素
        var obj = document.getElementById("myDiv");

        // 改变样式属性
        obj.style.background = 'red';  // 改变背景颜色
        obj.style.color = 'blue';      // 改变文本颜色
        obj.style.fontSize = '50px';   // 改变字体大小

       

 

修改后

四、添加 

1、创建元素
    <h2>现有列表</h2>
    <ul>
        <li>项目 1</li>
        <li>项目 2</li>
        <li>项目 3</li>
    </ul>
    <button id="addElementBtn">添加新元素</button>
    <button id="cloneElementBtn">复制列表</button>
    <div id="output"></div>
js
     // 添加新元素的功能
     document.getElementById("addElementBtn").onclick = function() {
        var newNode = document.createElement("h1");
        newNode.innerText = "新添加的元素";
        newNode.className = "xixi";
        newNode.style.background = "purple";

// 将新元素添加到输出区域
        document.getElementById("output").appendChild(newNode);
        console.log(newNode);
    };

    // 复制现有列表的功能
    document.getElementById("cloneElementBtn").onclick = function() {
        var oldNode = document.querySelector("ul");
        var newNode = oldNode.cloneNode(true); // 复制整个列表,包括子元素
        newNode.style.backgroundColor = "lightgray"; // 为复制的列表添加背景色

        // 将复制的列表添加到输出区域
        document.getElementById("output").appendChild(newNode);
        console.log(newNode);
    };

2、添加元素 

       <h2>我的列表</h2>
    <ul id="myList">
        <li>项目 1</li>
        <li>项目 2</li>
        <li>项目 3</li>
    </ul>
    <button id="addBtn">添加新项目</button>
    <button id="insertBtn">在项目 2 前插入新项目</button>
    <button id="replaceBtn">替换项目 3</button>
  
js
// 获取列表元素
var obj = document.getElementById("myList");

// 添加新项目的功能
document.getElementById("addBtn").onclick = function() {
    var newNode = document.createElement("li");
    newNode.innerText = "新添加的项目";
    obj.appendChild(newNode); // 在列表最后添加新项目
};

// 在项目 2 前插入新项目的功能
document.getElementById("insertBtn").onclick = function() {
    var newNode = document.createElement("li");
    newNode.innerText = "插入的项目";
    var h4 = obj.children[1]; // 获取项目 2
    obj.insertBefore(newNode, h4); // 在项目 2 前插入新项目
};

// 替换项目 3 的功能
document.getElementById("replaceBtn").onclick = function() {
    var newNode = document.createElement("li");
    newNode.innerText = "替换后的项目";
    var h4 = obj.children[2]; // 获取项目 3
    obj.replaceChild(newNode, h4); // 替换项目 3
};

五、删除

    <h2>我的列表</h2>
    <ul id="myList">
        <li>项目 1 <button class="deleteBtn">删除</button></li>
        <li>项目 2 <button class="deleteBtn">删除</button></li>
        <li>项目 3 <button class="deleteBtn">删除</button></li>
    </ul>
js
 // 删除项的功能
 var list = document.getElementById("myList");
        
 // 为所有删除按钮添加事件监听器
 var deleteButtons = document.querySelectorAll(".deleteBtn");
 deleteButtons.forEach(function(button) {
     button.onclick = function() {
         // 获取要删除的列表项
         var listItem = button.parentNode; // button 的父节点是 li
         list.removeChild(listItem); // 使用列表的 removeChild 方法删除
         // 或者使用: listItem.parentNode.removeChild(listItem);
     };
 });

 

附上一张网上的参考资料

 

参考链接:DOM操作精要-CSDN博客

 


原文地址:https://blog.csdn.net/m0_62581697/article/details/145229896

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!