首页 > 其他分享 >DOM操作之元素查找

DOM操作之元素查找

时间:2023-12-26 12:44:36浏览次数:36  
标签:divBox console log DOM 元素 查找 var 节点

通常我们操作一个元素节点前都需要查找到这个元素,查找到这个元素有两种方式。

  1. 使用选择器函数查找元素
  2. 通过元素的关系属性来查找元素

使用选择器函数查找

getElementById

通过节点元素的ID得到此节点

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>getElementById</title>
</head>
<body>
    <div id="box">id选择器</div>
    <div id="boxDiv">boxDiv</div>
    <div id="boxDiv">boxDiv</div>

    <script>
        var box = document.getElementById('box');
        var boxDiv = document.getElementById('boxDiv');
        console.log("box:", box);
        console.log("boxDiv:", boxDiv);
</script>
</body>
</html>

上面的例子中,id = ”boxDiv“ 有重复,在HTML的规则中, ID在一个网页应当是唯一的,如果重复, documen.getElementById 方法也只会获取第一个。

getElementsByName

通过名称获得节点, 返回的是一个数组集合

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input type="hidden" name="up" />
    <input type="hidden" name="down" />

    <script>
        const up_names = document.getElementsByName("up");
        console.log(up_names);
</script>
</body>
</html>

getElementByTagName

通过标签名得到一组标签数组

注意:此方法返回的是数组,即使页面上只有一个此节点的元素

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>getElementByTagName</title>
</head>
<body>
    <div>哈喽,第一</div>
    <div>哈喽,第二</div>
    <div>哈喽,第三</div>
    <div>哈喽,第四</div>

    <div id="divBox">
        <p>段落</p>
        <p>段落</p>
        <p>段落</p>
        <p>段落</p>
    </div>

    <script>
        // 得到一个div标签的数据
        var divS = document.getElementsByTagName('div');
        console.log(divS);

        var divBox = document.getElementById('divBox');
        var pArray = divBox.getElementsByTagName('p');
        console.log(pArray);
</script>
</body>
</html>

getElementByClassName

通过class选择器得到元素节点的数组

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>getElementByIdElementByClassName</title>
</head>
<body>

    <div id="box1">
        <p class="child box1Child">box1节点一</p>
        <p class="child box1Child">box1节点二</p>
        <p class="child box1Child">box1节点三</p>
        <p class="child box1Child">box1节点四</p>
    </div>
    <div id="box2">
        <p class="child box2Child">box2节点2</p>
        <p class="child box2Child">box2节点二</p>
        <p class="child box2Child">box2节点三</p>
        <p class="child box2Child">box2节点四</p>
    </div>
    <script>
        
        // 会获取到所有 包含 class = child 的元素
        var child = document.getElementsByClassName('child');
        console.log('child:',child);

        
        var box1 = document.getElementById('box1');
        
        // 获取 id 为 box1 下的所有 class = box2Child 的子元素
        var box1Children = box1.getElementsByClassName('box1Child');

        console.log('box1Children:',box1Children);
</script>
</body>
</html>

querySelector

通过选择器或者选择器组得到元素节点,只能得到页面上的一个元素,如果有多个元素符合条件,则只能得到第一个元素

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>querySelector</title>
</head>
<body>
    <div id="box1">
        <p>子元素</p>
        <p class="child">子元素1</p>
        <p class="child">子元素2</p>
    </div>

    <script>
        // querySelector 多个元素只会获得第一个
        var child = document.querySelector('#box1 .child');
        console.log('child:', child);
</script>
</body>
</html>

querySelectoryAll

通过选择器或者选择器组得到数组元素

注:返回值是一个数组

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>querySelector</title>
</head>
<body>
    <div id="box1">
        <p>子元素</p>
        <p class="child">子元素1</p>
        <p class="child">子元素2</p>
    </div>

    <script>
       
        // 根据元素选择器获取所有的子元素
        var children = document.querySelectorAll('#box1 .child');
        console.log('children:', children);
</script>
</body>
</html>
方法 功能
getElmentById 通过ID得到元素
getElementsByName 通过名称得到元素
getElementByTagName 通过标签名得到元素数组
getElementByClassName 通过类名得到元素数组
querySelector 通过选择器得到元素
querySelectoryAll 通过选择器得到元素数组

关系属性查找元素

关系属性查找,是根据已知的节点去查找我们想要的节点

节点和节点组成了一棵树,有以下几种角色

父节点:在一个嵌套结构中,外层的被成为内层节点的父节点

子节点:嵌套在父节点内部的节点

兄弟节点:处在同一层级,并列的节点被称为兄弟节点

<!--id为parentNode被称为父节点-->
<div id='parentNode'>
  <!--子节点-->
  <div></div>
  <div></div>
</div>
<!--parentNode2 和 parentNode 并列,称为兄弟节点 -->
<div id='parentNode2'>
<div>

这些角色之间有以下几种关系,我们就可以用这些关系属性获取相应的元素节点

关系 所有节点
子节点 childNodes
父节点 parentNode
第一个子节点 firstChild
最后一个子节点 lastChild
前一个兄弟节点 previousSibling
后一个兄弟节点 nextSlibling

拓展

DOM中,文本和空白也应该算DOM的节点, 所以用上述表格中的属性取的是所有的节点

在日常开发中,我们可能只需要操作元素节点(带标签的)的节点, 因此,有了以下属性方便我们操作

关系 元素节点
子节点 children
第一个子节点 firstElementChild
最后一个子节点 lastElementChild
前一个兄弟节点 previousElementSibling
后一个兄弟节点 nextElementSibling
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>节点关系</title>
</head>
<body>
    
    <div id="divBox">
        <p>文字文字</p>
        <p class="secondP">文字文字</p>
        <p>文字文字</p>
    </div>
    <script>
        var divBox = document.getElementById('divBox');

        // 打印所有子节点 (包含空文本等也算一个节点)
        console.log(divBox.childNodes);
        // 打印所有元素节点(从IE9开始兼容)
        console.log(divBox.children);

        
        // 打印父节点
        var secondP = document.querySelector('.secondP');
        console.log('secondP:', secondP.parentNode);

        // 第一个子节点
        var firstChild = divBox.firstChild;
        console.log('第一个子节点:', firstChild);

        // 第一个子元素节点
        var firstElementChild = divBox.firstElementChild;
        console.log('第一个子元素节点:', firstElementChild);

        // 最后一个子节点
        var lastChild = divBox.lastChild;
        console.log('最后一个子节点:', lastChild);

        // 最后一个元素节点
        var lastElementChild = divBox.lastElementChild;
        console.log('最后一个元素节点:', lastElementChild);

        // 前一个兄弟节点 如果没有返回null
        var previousSibling = secondP.previousSibling;
        console.log('前一个兄弟节点:', previousSibling);

        // 前一个兄弟元素节点, 如果没有返回null
        var previousElementSibling = secondP.previousElementSibling;
        console.log('前一个兄弟元素节点:', previousElementSibling);

        // 后一个兄弟节点, 如果没有返回null
        var nextSibling  = secondP.nextSibling;
        console.log('后一个兄弟节点:', nextSibling);

        // 后一个兄弟元素节点 , 如果没有返回null
        var nextElementSibling = secondP.nextElementSibling;
        console.log('后一个兄弟元素节点:', nextElementSibling);
</script>
</body>
</html>

上面获取元素节点的方法兼容到IE9, 其实我们可以使用前面文章中提到的 nodeType 来模拟实现 这些方法,这种写法可以兼容到IE6

我们知道 nodeType = 1 的为元素节点,因此我们通过方法模拟实现类似children属性的功能, 获取一个元素的所有子节点

以下为实现代码

<div id="divBox">
        <p>文字文字</p>
        <p class="secondP">文字文字</p>
        <p>文字文字</p>
    </div>
    <script>
        var divBox = document.getElementById('divBox');

        function getChildren(node) {
            // 结果数组
            var children = [];
            // 遍历node这个节点的所有子节点,判断每一个子节点的nodeType属性是不是1
            // 如果时1 , 就推入数组
            for(var i = 0 ; i < node.childNodes.length; i++) {
                if(node.childNodes[i].nodeType == 1) {
                    children.push(node.childNodes[i]);
                }
            }
            return children;
        }
        console.log(getChildren(divBox));
</script>

标签:divBox,console,log,DOM,元素,查找,var,节点
From: https://www.cnblogs.com/haloujava/p/17927882.html

相关文章

  • 升序数组的二分查找
    我买了⼀双鞋,你好奇问我多少钱,我说不超过300元。你还是好奇,你想知道到底多少,我就让你猜,你会怎么猜?你会1,2,3,4...这样猜吗?显然很慢;⼀般你都会猜中间数字,⽐如:150,然后看⼤了还是⼩了,这就是⼆分查找,也叫折半查找。首先我们通过分析可以知道二分查找的本质就是循环,对于一个升序数组,应先找......
  • 代码随想录算法训练营第二天 | 239. 滑动窗口最大值,347.前 K 个高频元素
    一、239.滑动窗口最大值题目链接:LeetCode239.滑动窗口最大值学习前:思路:无学习后:自定义双端队列,实现push、pop、peek方法,使得队列单调非增。peek方法不变;当入队时,若当前元素比队尾元素大,则pop队尾,直到队列为空或当前元素不大于队尾元素;当出队时,若队列非空且队首元素和窗......
  • Halcon reduce_domain和scale_image的作用
    在Halcon中,reduce_domain是用于缩小图像域(ImageDomain)的操作。它的作用是通过指定一个感兴趣区域(ROI,RegionofInterest),将图像数据限制在该区域内,从而实现对图像进行裁剪或者缩小处理。reduce_domain的语法如下:reduce_domain(Image,Region,ReducedImage)其中,Image是输入的原始图......
  • java与算法基础(二) 二分查找
    二分查找基本算法用于查找已排列数组,且一般没有重复数左闭右开查找区间为[Left,Right),比较Left和Right中间的那个数和Target的。如果中间数大于target,将Left设为Middle-1;如果中间数小于target,将Right设为Middle。classSolution{publicintsearch(int[]num......
  • DOM
    DOM概述DOM(documentobjectmodel)是文档对象模型,它为开发者提供了操作HTML元素和文档节点的属性和方法,方便开发者使用这些属性和方法开发出功能更强大的网页。认识DOM在DOM中,一个HTML文档是一个树状结构,HTML文档中的元素、属性、文本等不同的内容在内存中转换为DOM树种向对应类......
  • 一个看似简单的查找算法 —— 二分查找算法
    前言二分查找算法应该是非常常见的一个算法了,查找速度快,算法逻辑简单是大家对该算法的一个大致印象。相信有很多同学能够在很短的时间内写出一个二分查找算法,即便记不太清二分查找算法的逻辑,稍微搜一下,瞟一眼,就能迅速回忆起该算法的大致逻辑,然后迅速写出来该算法。但是,实际上二......
  • CRC-Aided Sparse Regression Codes for Unsourced Random Access
    一、摘要随记仅用于个人对论文的分析、初步复现。1.1文件夹介绍随机包含了一篇论文的仿真结果的源代码,该论文的标题是"CRC-aidedSpareRegressionCodesforUnsourcedRandomAccess"。源代码CRC-aided_SPARCs_for_URA-main,一共包括三个文件夹:"CRC-BMSTcodesforst......
  • 讲解mtrand.RandomState.randint low >= high
    讲解mtrand.RandomState.randint(low>=high)的问题在使用NumPy进行随机数生成时,我们常常会使用mtrand.RandomState.randint(low,high)函数来生成指定范围内的随机整数。然而,在使用这个函数时,有一个非常容易犯错的地方,就是将low参数设置大于或等于high参数。让我们来看......
  • 二叉树的查找算法的实现与运用
    二叉树的查找算法的实现与运用这里我们需要运用到之前二叉树建立的知识点每一次调用Insert函数时,都会开辟一个BiNode类型的空间,同时递归调用。其次,我们在建立平衡二叉树时,当前节点的左结点小于该结点,当前节点的右结点大于该结点,所以,我们在递归之前添加了一个判断条件。最后,Inser......
  • 003元素定位方式与项目demo创建
    一、环境搭建1、创建项目,添加java-client依赖包             新建maven项目,引入java-client依赖包       2、创建并编写代码 测试运行以上代码,运行前需打开Appnium.Appnium没有打开时,运行会报错:Connectionrefused:connect 二、......