常用的4种获取元素方法的区别, getElementById, ..ClassName, ..TagName, .Name

您所在的位置:网站首页 到旅游地租车自驾 常用的4种获取元素方法的区别, getElementById, ..ClassName, ..TagName, .Name

常用的4种获取元素方法的区别, getElementById, ..ClassName, ..TagName, .Name

2024-02-10 08:52| 来源: 网络整理| 查看: 265

原生JS常用的4种获取元素方法分别是:

getElementById( )

返回的是一个dom对象(第一个输出)

而getElementsByClassName( )、getElementsByTagName( )、getElementsByName( )

返回的是元素集合(第二、三、四个输出)

那么,这返回的两种东西有什么区别呢?

## dom对象可以通过dom属性里的获取子节点属性,来操作其子元素(其他元素节点也一样),参照图三

## 元素集合是不可以操作节点的,因为返回来的不是dom对象,而是一个HTMLCollection对象,是一个包含着dom的对象,集合可以通过索引index来获取集合中的某一元素进行操作,如:

图一

到这里,有人可能会觉得奇怪不是说好的元素集合不能操作子节点吗?而且为什么还要在获取元素那里加个 "[0]" 这玩意呢?

这又涉及到了HTMLCollection对象转dom对象的知识了,看下面的例子:

图二

获取的这两个东西都是同个元素,不同的是一个为HC(简写)对象,一个是dom对象,鹅HC转DOM就是在后面加个 "[×]" 

那dom对象转HC对象呢?

其实上面也说了dom属性获取节点元素,返回的就是一个元素集合,参照图五

ps : ××.children跟××.children[0]是不一样的,前者是dom对象,后者是集合

那元素集合是真的不能操作元素节点吗??我们先看下面一个例子:

图三

这里说的是gnclass.children[0]有问题,undefined,就是没定义获取不到

这个报错可能有点不明了,可以用第一张图的代码稍微修改一下,来看一看结果是什么

图四

第一个输出结果其实就是DOM转HC

其他输出都是undefined,就证明完全获取不到,根本没有这个东西

从上面可以得出一个结论:

元素集合不可以操作dom节点

所以有几点是需要注意一下的(纯属本人心得..):

1.dom对象只要用了dom属性里操作节点的属性,返回的对象就会是集合对象(HTMLCollection),而不是dom对象

2.集合对象加了索引,返回的就是dom对象

下面是源码

.cred{ color: red; } var lis = document.getElementsByClassName("secUl")[0].children; lis[2].classList.add("cred"); // var ulHTMLCollection = document.getElementsByClassName("secUl"); // console.log(ulHTMLCollection); // var ulDOM = document.getElementsByClassName("secUl")[0]; // console.log(ulDOM); // var gbid = document.getElementById("getById"); // gbid.children[0].children[1].classList.add("cred"); // /获取gbid的第一个子元素的第二个子元素并为其添加cred类 (-_-注释不高亮,原谅我只为截个图)/ // var gbclass = document.getElementsByClassName("getByClass"); // gbclass.children[0].children[1].classList.add("cred"); // /同样的写法,但是却报错了/ // var gbid = document.querySelector("#getById"); // var gbclass = document.querySelector(".getByClass"); // var tag = document.getElementsByTagName("div").children; // var cname = document.getElementsByName("cdiv").children; // console.log(gbid); // console.log(gbclass); // console.log(tag); // console.log(cname);



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3