• 〖大前端 - 基础入门三大核心之JS篇㊳〗- DOM访问元素节点


    • 说明:该文属于 大前端全栈架构白宝书专栏目前阶段免费如需要项目实战或者是体系化资源,文末名片加V!
    • 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 从事过全栈研发、产品经理等工作,目前在公司担任研发部门CTO。
    • 荣誉:2022年度博客之星Top4、2023年度超级个体得主、谷歌与亚马逊开发者大会特约speaker全栈领域优质创作者



    ⭐ 访问元素节点

    所谓“访问”元素节点,就是指“得到”、“获取”页面上的元素节点

    对节点进行操作,第一步就是要得到它

    访问元素节点主要依靠document对象

    🌟 认识document对象

    document对象是DOM中最重要的东西,几乎所有DOM的功能都封装在了document对象中

    document对象也表示整个HTML文档,它是DOM节点树的

    document对象的nodeType属性值是9

    image-20230403160713431

    image-20230403160810420

    🌟 访问元素节点的常用方法

    方法功能兼容性
    document.getElementById()通过id得到元素IE6
    document.getElementsByTagName()通过标签名得到元素数组IE6
    document.getElementsByClassName()通过类名得到元素数组IE9
    document.querySelector()通过选择器得到元素IE8部分兼容,IE9完全兼容
    document.querySelectorAll()通过选择器得到元素数组IE8部分兼容,IE9完全兼容

    ✨ getElementById()

    getElementById()方法,通过id得到元素节点

    示例代码:

    <body>
        <div id="box">div>
        <p id="para">p>
    
        <script>
            //访问/获取元素节点
            var oBox = document.getElementById('box');  //注意括号里的大小写字母也要匹配
            var oPara = document.getElementById('para');
        script>
    body>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    注意事项:

    • 如果页面上有相同的元素,则只能得到第一个(所以页面上不要出现相同id的元素)
    • 不管元素藏的有多深,都可以找到

    ✨ 延迟运行

    在测试DOM代码时,通常JS代码一定要写到HTML节点的后面,否则JS无法找到相应HTML节点

    但是,也可以使用window.onload = function(){}事件,使页面加载完毕后,再执行指定的代码(原理就是给window窗口对象添加一个onload事件,onload表示加载完,即给窗口添加了一个全都加载完的事件监听,等页面加载完后,再执行function里面的方法)

    示例代码:

    <body>
        
        <script>
            //给window对象添加onload事件监听
            window.onload = function () {
                //访问/获取元素节点
                var oBox = document.getElementById('box');
                var oPara = document.getElementById('para');
                console.log(oBox);
                console.log(oPara);
            }
        script>
        <div id="box">div>
        <p id="para">p>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    image-20230403192109560

    很多公司会习惯将script标签放到head里面,这样写也需要加上“延时运行”来保证js代码在页面加载完毕后运行。

    ✨ getElementsByTagName()

    getElementsByTagName()方法,通过标签名得到节点数组

    数组方便遍历,从而可以批量操控元素节点

    即使页面上只有一个指定标签名的节点,也将得到长度为1的数组

    任何一个节点元素也可以调用getElementsByTagName()方法,从而得到其内部的某种类的元素节点

    示例代码:

    <body>
        <div class="box1">
            <p>我是段落p>
            <p>我是段落p>
            <p>我是段落p>
            <p>我是段落p>
        div>
        <div class="box2">
            <p>我是段落p>
            <p>我是段落p>
            <p>我是段落p>
            <p>我是段落p>
        div>
        <script>
            var oPs = document.getElementsByTagName('p');  //得到页面中的所有p标签
            console.log(oPs);
        script>
    body>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    image-20230405215132114

    如果想要得到指定盒子内的p标签,可以这样写:

    <body>
    	<div id="box1">
            <p>我是段落p>
            <p>我是段落p>
            <p>我是段落p>
            <p>我是段落p>
        div>
        <div id="box2">
            <p>我是段落2p>
            <p>我是段落2p>
            <p>我是段落2p>
            <p>我是段落2p>
        div>
        <script>
            //先得到box2
            var box2 = document.getElementById('box2');
            //再得到box2中的p标签
            var ps_inbox2 = box2.getElementsByTagName('p');
            console.log(ps_inbox2);
        script>
    body>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    image-20230405215511053

    ✨ getElementsByClassName()

    getElementsByClassName()方法,通过类名得到节点数组

    getElementsByClassName()方法从IE9开始兼容

    某个节点元素也可以调用getElementsByClassName()方法,从而得到其内部的某类名的元素节点

    ✨ querySelector()

    querySelector()方法,是通过选择器得到元素,括号中直接写选择器就可以了

    querySelector()方法只能得到页面上一个元素,如果有多个元素符合条件,则只能得到第一个元素

    querySelector()方法从IE8开始兼容,但从IE9开始支持CSS3的选择器,如:nth-child()、:[src^=‘husky’]等css3选择器形式都支持良好

    示例代码:

    <body>
        <div class="box">
            <p>我是段落1p>
            <p>我是段落2p>
            <p id="para">我是段落3p>
            <p>我是段落4p>
        div>
        <script>
            //得到class=box中,id=para的p标签
            var p = document.querySelector('.box #para');
            console.log(p);
        script>
    body>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    image-20230405221157827

    ✨ querySelectorAll()

    querySelectorAll()方法,是通过选择器得到元素数组,括号中写选择器

    即使页面上只有一个符合选择器的节点,也将得到长度为1的数组

    示例代码:

    <body>
        <div class="box">
            <p>我是段落1p>
            <p>我是段落2p>
            <p id="para">我是段落3p>
            <p>我是段落4p>
        div>
        <script>
            //得到class=box中的p标签
            var ps = document.querySelectorAll('.box p');
            console.log(ps);
            //得到了数组自然也可以选择其中的某一项了
            console.log(ps[2])
        script>
    body>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    image-20230405222415558

    querySelector()querySelectorAll() 是在实际工作中非常常用的获得节点的方法。

  • 相关阅读:
    动手学深度学习(Pytorch版)代码实践 -卷积神经网络-29残差网络ResNet
    .NET DataGridView数据绑定说明
    『亚马逊云科技产品测评』活动征文|阿里云服务器&亚马逊服务器综合评测
    【数据结构】串的定义;存储结构;基本操作的实现
    激光雷达中实现F-P标准具高热稳定性的帕尔贴精密温控解决方案
    【情态动词练习题】will 与 would
    docker错误
    自定义 Spring Boot Starter 组件
    10x倍加速PDE的AI求解:元自动解码器求解参数化偏微分方程
    【Android笔记32】Android中数据存储技术之SQLite事务操作以及存储大文件
  • 原文地址:https://blog.csdn.net/weixin_42250835/article/details/134497408