jacascript DOM节点获取

前言:这是笔者学习之后自己的理解与整理。如果有错误或者疑问的地方,请大家指正,我会持续更新!

getElementById()

  • obj.getElementById(id) 该方法接收一个参数(该元素的id),若找到则返回该元素对象,若不存在则返回null;
  • 任何HTML元素可以有一个 id 属性,在文档中该值必须唯一;
  • 若浏览器中出现多个 id 名的情况,CSS样式对所有该 id 名的元素都生效,但 javascript 脚本仅对第一个出现该 id 名的元素生效;

getElementsByTagName()

  • obj.getElementsByTagName(tagName) 方法接收一个参数,即要取得元素的标签名,而返回的是包含0或多个元素的类数组对象 HTMLCollection。可以使用方括号语法或 item() 方法来访问类数组对象中的项,length 属性表示对象中元素的数量;

getElementsByName()

  • obj.getElementsByName(name) 方法会返回带有给定 name 特性的所有元素;
  • IE9及以下浏览器只支持在表单元素上使用 getElementsByName() 方法;
  • IE9及以下浏览器中使用 getElementsByName() 方法也会返回id属性匹配的元素。因此,不要将 name 和 id 属性设置为相同的值;

getElementsByClassName()

  HTML5 新增了 getElementsByClassName() 方法;

  在 javascript 中 class 是保留字,所以使用 className 属性来保存 HTML 的 class 属性值;

  • obj.getElementsByClassName(classaName) 方法接收一个参数,是包含一个或多个类名的字符串,返回带有指定类的所有元素的类数组对象 HTMLCollection。传入多个类名时,类名的先后顺序不重要。与 getElementsByTagName() 类似,该方法既可以用于 HTML 文档对象 document,也可以用于 element 元素对象;
  • IE8及以下浏览器不支持 getElementsByClassName();
  • 在操作 class 类名时,需要通过 className 属性添加、删除和替换类名。因为 className 是一个字符串,所以即使只修改字符串一部分,也必须每次都设置整个字符串的值。要从 className 字符串中删除一个类名,需要把类名拆开,删除不想要的那个,再重新拼成一个新字符串;

classList

  • HTML5 为所有元素添加了 classList 属性,这个 classList 属性是新集合类型 DOMTokenList 的实例,它有一个表示自己包含多少元素的 length 属性,而要取得每个元素可以使用 item() 方法,也可以使用方括号法;
  • IE9及以下浏览器不支持 classList 属性;

  classList 还有以下4个方法,我们主要用这些方法操作类名,有了 classList 属性,className属性基本没有什么用武之地了:

  1. obj.classList.add(value); 将给定的字符串值添加到列表中,没有返回值,如果值已存在,则不添加;
  2. obj.classList.contains(value); 表示列表中是否存在给定的值,如果存在则返回true,否则返回false;
  3. obj.classList.remove(value); 从列表中删除给定的字符串,没有返回值;
  4. obj.classList.toggle(value); 如果列表中已经存在给定的值,删除它并返回false;如果列表中没有给定的值,添加它并且返回true;
        <div class="test abc"></div>
        <script>
            var oTest = document.getElementsByClassName(‘test‘)[0];
            var oTestAbc = document.getElementsByClassName(‘test abc‘)[0];
            var oAbc = document.getElementsByClassName(‘abc‘)[0];
            console.log(oTest === oTestAbc);//true
            console.log(oAbc === oTestAbc);//true
            console.log(oAbc === oTest);//true

            console.log(oTest.classList);//["test", "abc", value: "test abc"]
            console.log(oTest.classList[0]);//"test"
            console.log(typeof oTest.classList[0]);//"string"
            console.log(oTest.classList.item(0));//"test" 

            //add()将给定的字符串值添加到列表中,没有返回值,如果值已存在,则不添加;
            oTest.classList.add(‘def‘);
            console.log(oTest.classList);//["test", "abc", "def", value: "test abc def"] 

            //contains()表示列表中是否存在给定的值,如果存在则返回true,否则返回false;
            console.log(oTest.classList.contains(‘def‘));//true
            console.log(oTest.classList.contains(‘abcde‘));//false

            //remove()从列表中删除给定的字符串,没有返回值;
            oTest.classList.remove(‘abc‘);
            console.log(oTest.classList);//["test", "def", value: "test def"]

            //toggle()如果列表中已经存在给定的值,删除它并返回false;如果列表中没有给定的值,添加它并且返回true;
            console.log(oTest.classList.toggle(‘hello‘));//true
            console.log(oTest.classList);//["test", "def", "hello", value: "test def hello"]
            console.log(oTest.classList.toggle(‘test‘));//false
            console.log(oTest.classList);//["def", "hello", value: "def hello"]
        </script>

选择器API

  HTML5 拓展了 querySelector()、querySelectorAll() 和 matchesSelector() 这3种方法,通过 CSS选择器查询DOM文档取得元素的引用的功能变成了原生的API,解析和树查询操作在浏览器内部通过编译后的代码来完成,极大地改善了性能。

  • obj.querySelector(selector) 方法接收一个CSS选择符,返回与该模式匹配的第一个元素,如果没有找到匹配的元素,返回null。该方法既可用于文档 document 类型,也可用于元素element 类型。IE7及以下不支持。
  • obj.querySelectorAll(selector) 接收一个CSS选择符,返回一个类数组对象,如果没有匹配元素,返回空的类数组对象,而不是null;IE7及以下不支持;
  • obj.matchesSelector(selector) 方法接收一个CSS选择符参数,如果调用元素与该选择符相匹配,返回true;否则返回false;
  • obj.matchesSelector(selector) 有兼容性问题,IE9+浏览器支持 msMatchesSelector() 方法,firefox 支持 mozMatchesSelector() 方法,safari 和 chrome 支持webkitMatchesSelector() 方法。
        <div id="wrapper">
            <ul class="box">
                <li class="no1">第一行</li>
                <li class="no2">第二行</li>
                <li class="no3">第三行</li>
                <li class="no4">第四行</li>
                <li class="no5">第五行</li>
            </ul>
        </div>
        <script type="text/javascript">
            var oWrapper = document.querySelector(‘#wrapper‘);
            var oUl = oWrapper.querySelector(‘ul‘);

            var oLiNo1 = oWrapper.querySelector(‘.no1‘);
            //obj.querySelector(selector) 方法接收一个CSS选择符,返回与该模式匹配的第一个元素,
            var oLiFirst = oWrapper.querySelector(‘li‘);
            var oFirstLi = oWrapper.querySelector(‘ul > li‘);
            console.log(oLiNo1 === oLiFirst);//true
            console.log(oLiNo1 === oFirstLi);//true
            console.log(oLiFirst === oFirstLi);//true
            console.log(oLiNo1.innerHTML , oLiFirst.innerHTML , oFirstLi.innerHTML);//第一行 第一行 第一行

            //obj.querySelectorAll(selector) 接收一个CSS选择符,返回一个类数组对象
            var oWrapperAll = document.querySelectorAll(‘#wrapper‘);
            console.log(oWrapperAll);//[div#wrapper]
            console.log(oWrapperAll[0] === oWrapper);//true

            var oWrapperArray = oWrapperAll[0];
            var oLiFirstAll = oWrapperArray.querySelectorAll(‘li‘);
            var oLiFirstArrayNo1 = oWrapperArray.querySelectorAll(‘li‘)[0];
            console.log(oLiFirstArrayNo1 === oLiNo1);//true
            console.log(oLiFirstAll[1].innerHTML);//第二行

//            console.log(oWrapperArray.matchesSelector(‘#wrapper‘));
            //TypeError: oWrapperArray.matchesSelector is not a function

            console.log(oWrapperArray.webkitMatchesSelector(‘#wrapper‘));//true
            //obj.matchesSelector(selector) 有兼容性问题,
            //IE9+浏览器支持 msMatchesSelector() 方法,
            //firefox 支持 mozMatchesSelector() 方法,
            //safari 和 chrome 支持webkitMatchesSelector() 方法。
        </script>

  选择器API使用时,需要注意的是:

  • querySelectorAll() 方法得到的类数组对象是非动态实时的,所以如果要计算长度等的实事值,最好重新获取;当然以前的 getElementById() 之类的就没这个毛病;
  • selector 类方法在元素上调用时,指定的选择器仍然在整个文档中进行匹配,然后过滤出结果集,以便它只包含指定元素的后代元素。这看起来是违反常规的,因为它意味着选择器字符串能包含元素的祖先而不仅仅是所匹配的元素;所以如果出现后代选择器,为了防止该问题,可以在参数中显式地添加当前元素的选择器;
        <div id="wrapper">
            <ul class="box">
                <li class="no1">第一行</li>
                <li class="no2">第二行</li>
                <li class="no3">第三行</li>
                <li class="no4">第四行</li>
                <li class="no5">第五行</li>
            </ul>
        </div>
        <script type="text/javascript">
            var oWrapper = document.querySelector(‘#wrapper‘);
            var oUl = oWrapper.querySelector(‘ul‘);

            var oLiLast = oUl.querySelector(‘li:last-of-type‘);
            var oLiAll = oUl.querySelectorAll(‘ul > li‘);
            console.log(oLiLast.innerHTML);//第五行
            console.log(oLiAll.length);//5

            var newLi = document.createElement(‘li‘);
            newLi.innerHTML = ‘新加的Li,放到最后面‘;
            oUl.appendChild(newLi);
            //querySelectorAll() 方法得到的类数组对象是非动态实时的;
            console.log(oLiLast.innerHTML);//第五行
            console.log(oLiAll.length);//5
            console.log(oUl.querySelector(‘li:last-of-type‘).innerHTML);//新加的Li,放到最后面
            console.log(oUl.querySelectorAll(‘ul > li‘).length);//6
        </script>

        <div class="wrapper">
            <div class="test1"></div>
            <div class="test2"></div>
        </div>
        <script type="text/javascript">
            var oWrapper = document.querySelector(‘.wrapper‘);
            //selector 类方法在元素上调用时,指定的选择器仍然在整个文档中进行匹配,然后过滤出结果集,以便它只包含指定元素的后代元素。
            //这看起来是违反常规的,因为它意味着选择器字符串能包含元素的祖先而不仅仅是所匹配的元素
            console.log(oWrapper.querySelectorAll(‘div div‘));//[div.test1, div.test2]
            //这句代码我的理解是获取oWrapper内部子孙元素中,div里嵌套的div,这里没有这种情况,所以应该弹出一个空数组

            //如果出现后代选择器,为了防止该问题,可以在参数中显式地添加当前元素的选择器
            console.log(oWrapper.querySelectorAll(‘.wrapper div div‘));//[]
            console.log(oWrapper.querySelectorAll(‘.wrapper div‘));//[div.test1, div.test2]
        </script>

参考资料

  大神的讲解更清晰,他的其他随笔也很好, http://www.cnblogs.com/xiaohuochai/p/5795796.html

时间: 2024-10-25 04:52:23

jacascript DOM节点获取的相关文章

jacascript DOM节点——节点关系与操作

前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 节点关系 DOM可以将任何HTML描绘成一个由多层节点构成的结构.每个节点都拥有各自的特点.数据和方法,也与其他节点存在某种关系.节点之间的关系构成了层次,而所有页面标签则表现为一个以特定节点为根节点的树形结构,也就是DOM树.下图为各节点之间的关系: 父级属性 parentNode 和 parentElement 每个节点都有一个 parentNode 属性,该属性指向文档树中的父节点.对于一个节点来

jacascript DOM节点——节点内容

前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! innerHTML 在读模式下,返回与调用元素的所有子节点(包括元素.注释和文本节点)对应的 HTML 标记: 在写模式下,innerHTML 会根据指定的值创建新的 DOM 树,然后用这个 DOM 树完全替换调用元素原先的所有子节点: 如果将 innerHTML 属性设为空,等于删除所有它包含的所有节点: 对 innerHTML 属性用"+="操作符重复追加一小段文本通常效率低下,因为它既要

React 事件对象、键盘事件、表单事件、ref获取dom节点、react实现类似Vue双向数据绑定

1.案例实现代码 import React, { Component } from 'react'; /** * 事件对象.键盘事件.表单事件.ref获取dom节点.react实现类似Vue双向数据绑定 * 事件对象: 在触发DOM上的某个事件时,会产生一个事件对象event,这个对象包含着所有与事件有关的信息 * 表单事件: 获取表单的值 * 1.监听表单的改变事件 ---onChange * 2.在改变的事件里面获取表单输入的值 ---event * 3.把表单输入的值赋值给username

关于dom节点的一些基础

// dom节点:记载html页面时,web浏览器生成一个大对象结构,用来表示页面的内部结构,dom将这种树形结构理解为由节点组成 // 节点的种类:元素节点 文本节点 属性节点 // dom节点获取 tag name // html标签的属性 id title style className // getAttribute(名称) 获取特定元素节点的属性值 // setAttribute(名称,值)设置元素节点属性的值 // removeAttribute(名称) 移除特定元素节点的属性 //

(转载)html dom节点操作(获取/修改/添加或删除)

DOM 是关于如何获取.修改.添加或删除 HTML 元素的标准,下面为大家介绍下html dom节点操作,感兴趣的朋友可以参考下 HTML DOM 是关于如何获取.修改.添加或删除 HTML 元素的标准.在 HTML DOM 中,所有事物都是节点.DOM 是被视为节点树的 HTML. 根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点: 整个文档是一个文档节点 每个 HTML 元素是元素节点 HTML 元素内的文本是文本节点 每个 HTML 属性是属性节点 注释是注释节

通过DOM节点操作来获取表单信息

这是之前突发奇想地用dom节点的关系来操作表单的故事.. 事情的经过是这样的,大概就是一个平台注册后有留言功能,管理员登录之后可以对这些留言进行回复.这个页面呢,就是通过foreach获取到数据库里的信息,把用户的ID以及留言信息最后呈现在界面上的样子大概如下图(我的画图天赋真是杠杠滴)(害羞捂脸) 没错就是这么酷炫的. 左侧是用户的ID 中间是用户留言内容 每个后面都有一个回复按钮 管理员点击回复之后 相应的留言框下部就会出现一个文本框,然后就可以愉快的回复了.对了还有一个回复发送以及删除功能

JavaScript获取DOM节点HTML元素CSS样式

JavaScript获取DOM节点HTML元素CSS样式技术 maybe yes 发表于2015-01-10 18:07 原文链接 : http://blog.lmlphp.com/archives/59  来自 : LMLPHP后院 如何使用 JavaScript 获取某个 DOM 节点下 HTML 元素的 CSS 样式值?使用过 JQuery 的童鞋一定都非常的熟悉,Jquery 提供了非常强大的 CSS 方法,可以很方便的设置和获取元素的 style 属性. 某些情况下,我们不能使用 JQ

JavaScript---网络编程(6)-Dom和Bom模型概念讲解(节点获取,window对象)

本节讲Dom和Bom模型概念讲解(节点获取,window对象). out.js: 写了2个输出到页面的函数. function println(param){ document.write(param+"<br/>"); } function print(param){ document.write(param); } window对象中的方式: 方法: confirm : bConfirmed = window.confirm( [sMessage]) 显示一个确认对话框

获取dom节点

如何使用 JavaScript 获取某个 DOM 节点下 HTML 元素的 CSS 样式值?使用过 JQuery 的童鞋一定都非常的熟悉,Jquery 提供了非常强大的 CSS 方法,可以很方便的设置和获取元素的 style 属性. 某些情况下,我们不能使用 JQuery 时,就必须使用纯 JavaScript 获取元素的 style 属性值.本文将介绍使用纯 JavaScript 获取元素的的样式值. 使用 CSS 控制页面的四种方式,分别为行内样式(内联样式).内嵌式.链接式.导入式,下面分