javascript-DOM 基本概念及DOM节点

一:属性和方法

属性:是节点(HTML 元素)的值,您能够获取或设置(比如节点的名称或内容)。

方法:是我们可以在节点(HTML 元素)上执行的动作。(比如添加或修改元素)。

二:HTML DOM 定义:

DOM(Document Object Model):文档模型,

HTML DOM 定义了所有 HTML 元素的对象和属性,以及访问它们的方法。

HTML DOM 是关于如何获取、修改、添加或删除 HTML 元素的标准。

在js中通过document这个对象提供的方法

三:HTML DOM 节点信息

1:HTML DOM 节点定义:是DOM结构中最基本的组成单元,每一个HTML标签都是DOM结构的节点,节点也称之为元素

  • 文档是一个文档。
  • 所有的HTML元素都是元素节点。
  • 所有 HTML 属性都是属性节点。
  • 文本插入到 HTML 元素是文本节点。are text nodes。
  • 注释是注释节点

2:属性是节点(HTML 元素)的值,您能够获取或设置。每个节点都拥有包含着关于节点某些信息的属性。这些属性是:

  nodeName(节点名称)

  • nodeName 是只读的
  • 元素节点的 nodeName 与标签名相同
  • 属性节点的 nodeName 与属性名相同
  • 文本节点的 nodeName 始终是 #text
  • 文档节点的 nodeName 始终是 #document

  注释:nodeName 始终包含 HTML 元素的大写字母标签名。

  nodeValue(节点值)

  • 元素节点的 nodeValue 是 undefined 或 null
  • 文本节点的 nodeValue 是文本本身
  • 属性节点的 nodeValue 是属性值
  • nodeValue 属性对于文档节点和元素节点是不可用的。

  nodeType(节点类型)nodeType 是只读的。

  • 元素:1
  • 属性:2
  • 文本:3
  • 注释:8
  • 文档:9

四:HTML DOM innerHTML 属性

获取元素内容的最简单方法是使用 innerHTML 属性。

innerHTML 属性对于获取或替换 HTML 元素的内容很有用。

五:访问 HTML 元素(节点)

您能够以不同的方式来访问 HTML 元素:

  • 通过使用 getElementById() 方法
  • 通过使用 getElementsByTagName() 方法
  • 通过使用 getElementsByClassName() 方法,IE6,7,8不支持。
    获取class元素常规封装
  • <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
        <style>
    
        </style>
        <script>
            /*
             * getByClass(document, ‘li‘, ‘box‘);
             * getByClass(document, ‘li‘, ‘box,box1‘);
             * getByClass(document, ‘li‘, ‘box box1‘);
             * */
            window.onload = function() {
    
                var arr = getByClass(document,‘li‘,‘box‘);
    
                console.log( arr );
    
            }
    
            function getByClass(obj, tagname, classes) {
    
                var classes = classes.split(‘ ‘);
                //获取指定范围内的所有指定元素
                var eles = obj.getElementsByTagName(tagname);
                //一个用来保存结果的数组
                var result = [];
                //循环遍历选中的元素eles
                for (var i=0; i<eles.length; i++) {
                    //把当前循环过程中某个元素的class取出来,并分割成数组(元素可能会有多个class)
                    var classArr = eles[i].className.split(‘ ‘);
                    //判断当前这个元素的class中是否有我们要找的class
                    if ( inArray(classArr, classes) ) {
                        //如果当前元素中有我们要找的class,则把当前元素保存到结果数组中
                        result.push( eles[i] );
                    }
                }
                //返回结果数组
                return result;
    
            }
    
            //[‘box‘, ‘box1‘]  [‘box1‘, ‘box2‘, ‘box‘]
    
            function inArray(arr1, arr2) {
                for (var i=0; i<arr2.length; i++) {
                    var b = false;
                    for (var j=0; j<arr1.length; j++) {
                        if (arr2[i] == arr1[j]) {
                            b = true;
                            break;
                        }
                    }
                    //如果当前这一次循环比较结束以后,b的值为真,则表示arr2中的某一个在arr1中是存在,否则就不存在
                    if (!b) {
                        return false;
                    }
                }
                //只要代码能运行到这里,就说明了arr2中的值在arr1中都是存在的
                return true;
            }
        </script>
    </head>
    
    <body>
        <ul id="ul1">
            <li>1111111</li>
            <li class="box">222222222</li>
            <li class="box box1">33333333</li>
            <li class="box2">44444444444</li>
            <li class="box1">55555555555</li>
            <li class="box1 box2 box">6666666666666</li>
        </ul>
    </body>
    </html>

    获取class元素正则表达式

    /*-------------------------- +
        获取id, class, tagName
         +-------------------------- */
        var get = {
        byId: function(id) {
        return typeof id === "string" ? document.getElementById(id) : id;
            },
        byClass: function(sClass, oParent) {
        var aClass = [];
        var reClass = new RegExp("(^| )" + sClass + "( |$)");
        var aElem = this.byTagName("*", oParent);
        for (var i = 0; i < aElem.length; i++) reClass.test(aElem[i].className) && aClass.push(aElem[i]);
        return aClass;
            },
        byTagName: function(elem, obj) {
        return (obj || document).getElementsByTagName(elem);
            }
        };

六:HTML DOM划分:

-----------------------------------------------------------------------------------

按层级划分:父节点,子节点,兄弟节点

父子节点:上下层关系

兄弟节点:同一层关系

祖先节点:当前元素上面的所有的节点

子孙节点:当前元素下面的所有的节点

-----------------------------------------------------------------------------------

按类型划分:元素节点,文本节点,属性节点,注释节点,document节点

元素节点(1):html标签

文本节点(3):文字,特殊符号,换行符,制表符。。。(给用户看的)

属性节点(2):元素节点上各种属性

注释节点(8):文档中的注释<!--  -->

document节点(9):特有的document对象

-----------------------------------------------------------------------------------

七:HTML DOM 节点树HTML DOM 将 HTML 文档视作树结构。这种结构被称为节点树:

通过 HTML DOM,树中的所有节点均可通过 JavaScript 进行访问。所有 HTML 元素(节点)均可被修改,也可以创建或删除节点。

节点树中的节点彼此拥有层级关系。

父(parent)、子(child)和同胞(sibling)等术语用于描述这些关系。

父节点拥有子节点。

同级的子节点被称为同胞(兄弟或姐妹)。

  • 在节点树中,顶端节点被称为根(root)
  • 每个节点都有父节点、除了根(它没有父节点)
  • 一个节点可拥有任意数量的子节点
  • 同胞是拥有相同父节点的节点

demo1:



<html>
<head>
    <title>DOM 教程</title>
</head>
<body>
<h1>DOM 第一课</h1>
<p>Hello world!</p>
</body>
</html>

demo分析:

-----------------------------------------------------------------------------------

  • <html> 节点没有父节点;它是根节点
  • <head> 和 <body> 的父节点是 <html> 节点
  • 文本节点 "Hello world!" 的父节点是 <p> 节点

-----------------------------------------------------------------------------------

  • <html> 节点拥有两个子节点:<head> 和 <body>
  • <head> 节点拥有一个子节点:<title> 节点
  • <title> 节点也拥有一个子节点:文本节点 "DOM 教程"
  • <h1> 和 <p> 节点是同胞节点,同时也是 <body> 的子节点

-----------------------------------------------------------------------------------

  • <head> 元素是 <html> 元素的首个子节点
  • <body> 元素是 <html> 元素的最后一个子节点
  • <h1> 元素是 <body> 元素的首个子节点
  • <p> 元素是 <body> 元素的最后一个子节点
时间: 2024-10-16 14:25:39

javascript-DOM 基本概念及DOM节点的相关文章

HTML DOM基本概念及Element.getAttribute(&quot;value&quot;) 与Attribute.value差异

今晚整理博客的时候写个js, 发现了一个坑.. 一不小心就掉进去的坑.. 本来想针对此坑写写见解就完了, 但觉得趁这个机会顺便再次说一下HTML DOM相关的东东. 在开始之前我先引出几个问题, 由此引出后面的话题, 也算是作为本人个人的学习笔记, 与大家共勉. 我们先来提3个问题. HTML DOM是什么? HTML DOM 的全称为: HTML Document Object Model, 意思是: 文档对象模型. 我们常说的DOM, 就是HTML DOM. DOM是对HTML文档里所有的一

javascript之解决dom中存在的空白节点问题

下面有一段html文档 <body> <h1>Introduction to the DOM</h1> <p class="test">There are a number of reasons why the DOM is awesome, here are some:</p> <ul> <li id="everywhere">It can be found everywhere.

JavaScript基础(六) DOM模型

一.文档对象模型 DOM( Document Object Model)文档对象模型,它提供了访问.动态修改文档的借口,W3C指定了DOM规范,主流浏览器都支持.DOM由3部分组成,分别是CoreDom.XML DOM和HTML DOM. 1.Core DOM:也称核心DOM变成,定义了一套标准的针对任何结构化文档的对象,包括HTML.XHTML和XML. 2.XML DOM:定义了一套标准的针对XML文档的对象. 3.HTML DOM:定义了一套标准的针对HTML文档的对象. 二.认识DOM节

第一百一十三节,JavaScript文档对象,DOM基础

JavaScript文档对象,DOM基础 学习要点: 1.DOM介绍 2.查找元素 3.DOM节点 4.节点操作 DOM(Document Object Model)即文档对象模型,针对HTML和XML文档的API(应用程序接口).DOM描绘了一个层次化的节点树,运行开发人员添加.移除和修改页面的某一部分.DOM脱胎于Netscape及微软公司创始的DHTML(动态HTML),但现在它已经成为表现和操作页面标记的真正跨平台.语言中立的方式. 一.DOM介绍 DOM中的三个字母,D(文档)可以理解

JavaScript基础15——js的DOM对象

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>js的DOM对象</title> 6 <script type="text/javascript"> 7 // DOM:Document Object Model 文档对象模型 8 /* 9 文档:超文本文档html.xml 10 对象:提供了属

《高性能javascript》 领悟随笔之-------DOM编程篇(二)

<高性能javascript> 领悟随笔之-------DOM编程篇二 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整个页面文档.DOM编程性能一直以来都是非常受开发者关注的话题,如何编写高性能的DOM是前端开发必不可少的技能. 1.重绘与重排 当浏览器加载完页面所有的元素.js.css.图片之后会自动生成两个数据结构: 1.dom树 (图片为转载) 如图所示,dom树表示了整个页面文档的结构,通过访问dom树我们可以得到某

高性能javascript(第三章 DOM编程)

1.浏览器之DOM 浏览器通常要求 DOM 实现和 JavaScript 实现保持相互独立 这对性能意味着什么呢?简单说来,两个独立的部分以功能接口连接就会带来性能损耗.一个很形象的 比喻是把 DOM 看成一个岛屿,把 JavaScript(ECMAScript)看成另一个岛屿,两者之间以一座收费桥连接 每次 ECMAScript 需要访问DOM 时,你需要过桥,交一次“过桥费”.你操作 DOM 次数越多,费用就越高.一般的建议是尽量减少过桥次数,努力停留在 ECMAScript 岛上.本章将对

JavaScript高级程序设计学习笔记--DOM

DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序接口). Document类型 文档的子节点 虽然DOM标准规定Document节点的子节点可以是DocumentType,Element,ProcessingInstruction或Comment,但还有两个内置的访问其子节点的快捷方式.第一个就是documnetElement属性,该属性始终指向HTML页面中的<html>元素.另一个就是通过childNodes列表访问文档元素,但通过documentElement属性则

JavaScript:操作 BOM 和 DOM

JavaScript:操作 BOM 和 DOM 浏览器说明 由于JavaScript的出现就是为了能在浏览器中运行,所以,浏览器自然是JavaScript开发者必须要关注的. 目前主流的浏览器分这么几种: IE 6~11:国内用得最多的IE浏览器,历来对W3C标准支持差.从IE10开始支持ES6标准: Chrome:Google出品的基于Webkit内核浏览器,内置了非常强悍的JavaScript引擎——V8.由于Chrome一经安装就时刻保持自升级,所以不用管它的版本,最新版早就支持ES6了: