• <li id="oiayd"><ruby id="oiayd"></ruby></li>

    <acronym id="oiayd"><strong id="oiayd"></strong></acronym>

    <acronym id="oiayd"></acronym>
    <track id="oiayd"><ruby id="oiayd"></ruby></track>
  • <track id="oiayd"><ruby id="oiayd"><menu id="oiayd"></menu></ruby></track>

  • 400-650-7353
    您所在的位置:首页 > IT干货资料 > web前端 > 【Web前端基础知识】dom获取元素的方式

    【Web前端基础知识】dom获取元素的方式

    • 发布: Web前端培训
    • 来源:优就业
    • 2021-09-28 14:22:04
    • 阅读()
    • 分享
    • 手机端入口

    在原生js中我们会经常操作dom结构,通过获取具体标签进行操作,那我们知道常用的js获取元素的方式有哪些吗,并且这些方法之间的区别是什么呢,以及有哪些注意点呢!接下来我们就一起看一下吧!

    JavaScript获取元素的的几种方式以及区别

    (1) 通过ID名获取getElementById(“id名”):

    通过id名是获取具体的实际的一个标签,是静态获取,即获取的时候有就可以获取得到,后续再添加该id名的标签也获取不到了。为何会说通过id名获取是静态获取呢,我们通过具体的例子来看:

    1. <ul id="list"></ul> 

    Js代码为:

    1. var oUl = document.getElementById("list"); 
    2.    var byId = document.getElementById("h"); 
    3.    console.log(byId); 
    4.    //在ul中添加一个li 
    5.    oUl.innerHTML = "<li id='h' style='width:100px;height:100px;background:red'></li>"
    6.    console.log(byId); 

    最后的结果为:null null

    可以得出结论通过id名的获取是静态获取,在后期添加的获取不到

    注意:

    ① 上下文必须是document,至于原因我们留到最后再解释;

    ② 通过id只获取到一个元素,毕竟id是独一无二的;

    ③ 通过id获取是静态获取;

    (2) 通过name属性获取 getElementsByName('name属性值')

    当我们的标签有name属性时,可以通过其name属性来获取标签,如在单选按钮中

    1. <input type="radio" name='sex' >男  
    2. <input type="radio" name='sex' checked>女 

    Js代码为:

    1. var oSex = document.getElementsByName('sex'); 
    2. console.log(oSex); 

    结果如下图是节点列表,为一个类数组:

    注意:

    ① 上下文必须是document;

    ② 获取的结果是一个类数组,不是一个真正的数组,有length属性,可以通过具体的下标获取对应的元素;

    (3) 通过标签名获取:getElementsByTagName('标签名')

    通过标签名获取的元素是一个元素集合,为类数组形式,有length属性;且通过标签名获取为动态获取,即获取的时候没有该标签,若后续进行手动添加后也能获取到。举例:

    1. <ul id="list"></ul> 

    Js代码如下:

    1. var oUl = document.document.getElementById("list"); 
    2.     var byTagName = document.getElementsByTagName("li"); 
    3.     console.log(byTagName); 
    4.     //在ul中添加一个li 
    5.     oUl.innerHTML = "<li id='h' style='width:100px;height:100px;background:red'></li>"
    6.     console.log(byTagName); 

    最后的结果为:

    可以看到在手动添加li标签之后,可以动态地获取到添加之后的标签,但是我们也看到了通过标签名获取的元素是一个集合,就算只有一个元素也是一个集合,是以一个类数组的形式存在,并不是真正的数组。

    注意:

    ① 上下文可以是document,也可以是一个父元素;

    ② 是一个类数组,有长度属性,通过[]可以获取具体的某一项;

    ③ 在使用时要通过具体的下标,比如添加点击事件时;

    (4) 通过类名获取 getElementsByClassName(‘类名’)

    通过类名获取元素的方式与用法基本一样,也是动态获取;

    注意:

    ① 上下文可以是document,也可以是一个父元素;

    ② 是一个类数组,有长度属性,通过[]可以获取具体的某一项;

    ③ 在使用时要通过具体的下标,比如添加点击事件时;

    ④ 注意单词拼写,因为class是一个关键字,所以为getElementsByClassName

    (5) 快速获取html元素 document.documentElement

    1. document对象有一个documentElement属性,该属性始终指向HTML页面中的<html>元素。 
    2. var html = document.documentElement; //取得对<html>的引用   

    (6) 快速获取body元素 document.body

    1. document 对象还有一个 body 属性,直接指向<body>元素。 
    2. var body = document.body; //取得对<body>的引用 

    (7) 通过选择器获取一个元素 querySelector("css选择器")

    该方法接收一个 CSS 选择符,返回与该模式匹配的第一个元素。

    注意:

    ① 上下文可以是document,也可以是一个父元素;

    ② 参数是选择器,如“div .active”;

    ③ 返回值只能获取到第一个元素;

    ④ 与通过id获取的方式一样为静态获取;

    ⑤ Ie8以下存在兼容问题;

    (8) 通过选择器获取一组元素 querySelectorAll("css选择器")

    该方法接收一个 CSS 选择符,返回的是所有匹配的元素而不仅仅是一个元素。其结果为一个节点列表。

    注意:

    ① 上下文可以是document,也可以是一个父元素;

    ② 参数是选择器,如“div .active”;

    ③ 返回值为一组节点列表,是一个类数组;

    ④ 与通过id获取的方式一样为静态获取;

    ⑤ Ie8以下存在兼容问题;

    使用原生JS获取DOM元素的8个方法讲完了,接下来在讲一下为什么有的方法只能在document上使用。

    拿div举例子,div是HTMLDivElement类的一个实例,document是HTMLDocument 的实例。

    他们的继承关系:

    HTMLDivElement > HTMLElement > Element > Node > EventTarget

    HTMLDocument > Document > Node > EventTarget

    我们都知道子类继承父类,子类就可以使用父类的属性和方法。他们相同的继承关系是Node和EventTarget,也就是说他们都可以使用Node和EventTarget上的方法。

    如Node上的nodeName、parentNode等,和EventTarget上的addEventListener等。

    getElementById只在Document类的原型上,HTMLDivElement 没有继承Document类,所以div不能使用getElementById方法。

    getElementsByTagName即在Document类的原型上也在Element类的原型上,所以div和document都可以使用getElementsByTagName方法。其它同理。

    文章“【Web前端基础知识】dom获取元素的方式”已帮助

    更多内容

    >>本文地址:http://www.seyoho.com/zhuanye/2021/70199.html

    THE END  

    声明:本站稿件版权均属中公教育优就业所有,未经许可不得擅自转载。

    1 您的年龄

    2 您的学历

    3 您更想做哪个方向的工作?

    获取测试结果
    • 大前端大前端
    • 大数据大数据
    • 互联网营销互联网营销
    • JavaJava
    • Linux云计算Linux
    • Python+人工智能Python
    • 嵌入式物联网嵌入式
    • 全域电商运营全域电商运营
    • 软件测试软件测试
    • 室内设计室内设计
    • 平面设计平面设计
    • 电商设计电商设计
    • 网页设计网页设计
    • 全链路UI/UE设计UI设计
    • VR/AR游戏开发VR/AR
    • 网络安全网络安全
    • 新媒体与短视频运营新媒体
    • 直播带货直播带货
    • 智能机器人软件开发智能机器人
     

    快速通道fast track

    近期开班时间TIME

    日韩一级a片无卡顿

  • <li id="oiayd"><ruby id="oiayd"></ruby></li>

    <acronym id="oiayd"><strong id="oiayd"></strong></acronym>

    <acronym id="oiayd"></acronym>
    <track id="oiayd"><ruby id="oiayd"></ruby></track>
  • <track id="oiayd"><ruby id="oiayd"><menu id="oiayd"></menu></ruby></track>