Java教程

JavaScript DOM

本文主要是介绍JavaScript DOM,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

HTML DOM 节点

在 HTML DOM 中,所有事物都是节点。DOM 是被视为节点树的 HTML。

DOM Nodes

DOM 节点

根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点:

  • 整个文档是一个文档节点
  • 每个 HTML 元素是元素节点
  • HTML 元素内的文本是文本节点
  • 每个 HTML 属性是属性节点
  • 注释是注释节点

节点父、子和同胞

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

我们常用父(parent)子(child)同胞(sibling)等术语来描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。

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

下面的图片展示了节点树的一部分,以及节点之间的关系:

Node tree

请看下面的 HTML 片段:

<html> <head> <meta charset="utf-8"> <title>DOM 教程</title> </head> <body> <h1>DOM 课程1</h1> <p>Hello world!</p> </body> </html>

从上面的 HTML 中:

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

并且:

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

并且:

  • <head> 元素是 <html> 元素的首个子节点
  • <body> 元素是 <html> 元素的最后一个子节点
  • <h1> 元素是 <body> 元素的首个子节点
  • <p> 元素是 <body> 元素的最后一个子节点

警告!

DOM 处理中的常见错误是希望元素节点包含文本。

在本例中:<title>DOM 教程</title>,元素节点 <title>,包含值为 "DOM 教程" 的文本节点

可通过节点的 innerHTML 属性来访问文本节点的值。

HTML DOM 方法

HTML DOM 方法是我们可以在节点(HTML 元素)上执行的动作。

HTML DOM 属性是我们可以在节点(HTML 元素)设置和修改的值。

编程接口

可通过 JavaScript (以及其他编程语言)对 HTML DOM 进行访问。

所有 HTML 元素被定义为对象,而编程接口则是对象方法和对象属性。

方法是您能够执行的动作(比如添加或修改元素)。

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

getElementById() 方法

getElementById() 方法返回带有指定 ID 的元素:

var element=document.getElementById("intro");  

实例:

        //  document.getElementById();    获取带有指定 id 的节点(元素)         //  document.getElementsByClassName();  获取带有指定 ClassName(类名)的节点(元素)         //  document.getElementsByName();  获取带有指定 Name的节点(元素)         //  document.getelementsByTagname();  获取带有指定 Tagname(标签名) 的节点(元素)
        // document.querySelector(); 对象         // document.querySelectorAll(); 数组  

HTML DOM 对象 - 方法和属性

一些常用的 HTML DOM 方法:

  • getElementById(id) - 获取带有指定 id 的节点(元素)
  • appendChild(node) - 插入新的子节点(元素)
  • removeChild(node) - 删除子节点(元素)

一些常用的 HTML DOM 属性:

  • innerHTML - 节点(元素)的文本值
  • parentNode - 节点(元素)的父节点
  • childNodes - 节点(元素)的子节点
  • attributes - 节点(元素)的属性节点

一些 DOM 对象方法

这里提供一些您将在本教程中学到的常用方法:

方法描述
getElementById() 返回带有指定 ID 的元素。
getElementsByTagName() 返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)。
getElementsByClassName() 返回包含带有指定类名的所有元素的节点列表。
appendChild() 把新的子节点添加到指定节点。
removeChild() 删除子节点。
replaceChild() 替换子节点。
insertBefore() 在指定的子节点前面插入新的子节点。
createAttribute() 创建属性节点。
createElement() 创建元素节点。
createTextNode() 创建文本节点。
getAttribute() 返回指定的属性值。
setAttribute() 把指定属性设置或修改为指定的值。

 

 

HTML DOM 属性

属性是节点(HTML 元素)的值,您能够获取或设置。

        // 属性  attributes         //   console.log(li.id);         //   console.log(li.data-id);         //   console.log(li["data-id"]);         //   console.log(li.attributes["data-id"])  name value;         //   console.log(li.className);        

编程接口

可通过 JavaScript (以及其他编程语言)对 HTML DOM 进行访问。

所有 HTML 元素被定义为对象,而编程接口则是对象方法和对象属性。

方法是您能够执行的动作(比如添加或修改元素)。

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

innerHTML 属性

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

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

           下面的代码获取 id="intro" 的 <p> 元素的 innerHTML:
实例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
 
<p id="intro">Hello World!</p>
 
<script>
var txt=document.getElementById("intro").innerHTML;
document.write(txt);
</script>
 
</body>
</html>

 

在上面的例子中,getElementById 是一个方法,而 innerHTML 是属性。

lamp

innerHTML 属性可用于获取或改变任意 HTML 元素,包括 <html> 和 <body>。

 

nodeName 属性规定节点的名称。

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

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

 

nodeValue 属性

nodeValue 属性规定节点的值。

  • 元素节点的 nodeValue 是 undefined 或 null
  • 文本节点的 nodeValue 是文本本身
  • 属性节点的 nodeValue 是属性值

下面的例子会取回 <p id="intro"> 标签的文本节点值:

实例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
 
<p id="intro">Hello World!</p>
 
<script>
x=document.getElementById("intro");
document.write(x.firstChild.nodeValue);
</script>
 
</body>
</html>

nodeType 属性

nodeType 属性返回节点的类型。nodeType 是只读的。

比较重要的节点类型有:

元素类型NodeType
元素 1
属性 2
文本 3
注释 8
文档 9

实例:

 //  var li=document.querySelector("#li1");         //  li.parentElement.style.color="red";         //       console.log(li.parentElement.parentElement.parentElement.parentElement);         //       console.log(li.parentNode.parentNode.parentNode.parentNode.parentNode);         // }
        // var ul=document.querySelector("ul");         // console.log(ul.childNodes);    文本节点         // console.log(ul.children);       不包括文本节点

HTML DOM 访问

访问 HTML DOM - 查找 HTML 元素。

 

访问 HTML 元素(节点)

访问 HTML 元素等同于访问节点

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

  • 通过使用 getElementById() 方法
  • 通过使用 getElementsByTagName() 方法
  • 通过使用 getElementsByClassName() 方法

 

HTML DOM - 修改 HTML 内容

通过 HTML DOM,JavaScript 能够访问 HTML 文档中的每个元素。

 

改变 HTML 内容

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

下面的例子更改 <p> 元素的 HTML 内容:

实例:

//    var li=document.querySelector("#li1");         //    li.onclick=function(){             // console.log(this.innerHTML); html             // console.log(this.innerText);  Text             // console.log(this.outerHTML);  含有本身         //    }

改变 HTML 样式

实例:

   // 样式  style         //    var li= document.querySelector("#li1");         //    li.style.color="red"         //   li.style.backgrond-color="#ccc"; 不起作用         //   li.style.backgrondColor="#ccc"; 驼峰命名发         //   li.style["backgrond-color"]="#ccc";

使用事件

HTML DOM 允许您在事件发生时执行代码。

当 HTML 元素"有事情发生"时,浏览器就会生成事件:

 

HTML DOM - 元素

添加、删除和替换 HTML 元素。

添加:

 

删除:  

替换:

HTML DOM - 事件

 

对事件作出反应

当事件发生时,可以执行 JavaScript,比如当用户点击一个 HTML 元素时。

如需在用户点击某个元素时执行代码,请把 JavaScript 代码添加到 HTML 事件属性中:

onclick=JavaScript

HTML 事件的例子:

  • 当用户点击鼠标时
  • 当网页已加载时
  • 当图片已加载时
  • 当鼠标移动到元素上时
  • 当输入字段被改变时
  • 当 HTML 表单被提交时
  • 当用户触发按键时

 

onclick事件

 //    var li=document.querySelector("#li1");         //    li.onclick=function(){             // console.log(this.innerHTML); html             // console.log(this.innerText);  Text                      // console.log(this.outerHTML);  含有本身
        //    }

onchange 事件

onchange 事件常用于输入字段的验证。

var select=document.querySelector("select");         // select.onclick=function(){         //     console.log(this.value);         // }         select.onchange=function(){             console.log(this.value);         }         }   //    var btn=document.querySelector("button");         //    btn.onclick=function(){         //        console.log(this.value);  交互控件的值         //    }

onload 和 onunload 事件

当用户进入或离开页面时,会触发 onl oad 和 onunload 事件。

onload 事件可用于检查访客的浏览器类型和版本,以便基于这些信息来加载不同版本的网页。

onload 和 onunload 事件可用于处理 cookies。

 

onmouseover 和 onm ouseout 事件

onmouseover 和 onm ouseout 事件可用于在鼠标指针移动到或离开元素时触发函数。

 鼠标动画1:

  div.onmousemove=function(e){
                // 获取鼠标位置  
                //  console.log(e.x,e.y);
                span.style.top=e.y+"px";
                span.style.left=e.x+"px";
          }

例子:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            width: 200px;
            height: 200px;
            background-color: red;
        }
        span{
            position: absolute;
            top: 10px;
            left: 10px;
        }
    </style>
    <script>
        // e 事件对象
        window.onload=function(){
          var div=document.querySelector("div");
          var span=document.querySelector("span");
          div.onmousemove=function(e){
                // 获取鼠标位置  
                //  console.log(e.x,e.y);
                span.style.top=e.y+"px";
                span.style.left=e.x+"px";
          }
        }
    </script>
</head>
<body>
    <div></div>
    <span>这是一段文字</span>
</body>
</html>

 

 

鼠标动画2:

 

例子:点击小图片显示出大图片

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
                padding:0;
                margin:0;
            }
        body{
             position: relative;
        }
            ul{
                width: 1000px;
                min-width:600px;
                margin: 0 auto;
                display:flex;
                justify-content:space-between;
                align-items:center;
                list-style: none;
            }
            
            .big{
                width: 300px;
                height: 300px;
                position: absolute;
                display: none;
            }
    </style>
    <script>
     window.onload=function(){
   var  imgs=document.querySelectorAll("li img");
   var  big=document.querySelector(".big");
         for (let i = 0; i < imgs.length; i++) {
             imgs[i].onmousemove=function(e){
                big.style.top=e.y+10+"px";
                big.style.left=e.x+10+"px";
                big.src=this.src;
             }
             imgs[i].onmouseout=function(){
                 big.style.display="none";
             }
             imgs[i].onmouseenter=function(){
                 big.style.display="block";
             }
            }
         }
    </script>
</head>
<body>
    <ul>
        <li><img src="./a/toplist_a01.jpg" alt=""></li>
        <li><img src="./a/toplist_a02.jpg" alt=""></li>
        <li><img src="./a/toplist_a03.jpg" alt=""></li>
        <li><img src="./a/toplist_a04.jpg" alt=""></li>
        <li><img src="./a/toplist_a05.jpg" alt=""></li>
        <li><img src="./a/toplist_a06.jpg" alt=""></li>
      
    </ul>
    <img class="big" src="./a/toplist_a01.jpg" alt="">
</body>
</html>

 

tab切换 (选项卡)

2个for循环

法一:
 for (let i = 0; i < as.length; i++) {
            as[i].onclick=function(){
                for (var j = 0; j < as.length; j++) {
                   as[j].className="";
                }
                this.className="active";
            }
            
        }

法二:
                // ajax
                var url=this.attributes["data-url"].value;

例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        a{
            text-decoration:none;
            color: #333;
            
        }
       
        ul li{
            display: inline-block;
             height: 20px;
             width: 60px;
            

        }
        ul li a{
            display: block;
            text-align: center;
            background-color: #ccc;
        }
        .active{
            background-color: yellow;
        }
        .centent{
            width: 186px;
            height: 200px;
            border: 1px solid #ccc;
        } 
           

    </style>
    <script>
        window.onload=function(){
        var as=document.querySelectorAll("li  a");
        for (let i = 0; i < as.length; i++) {
            as[i].onclick=function(){
                for (var j = 0; j < as.length; j++) {
                   as[j].className="";
                }
                this.className="active";

                // ajax
                var url=this.attributes["data-url"].value;
            }
            
        }
        }
    </script>
</head>
<body>
    <ul>
        <li><a href="#" class="active" data-url="http://a">列表1</a></li>
        <li><a href="#" data-url="http://b">列表2</a></li>
        <li><a href="#"data-url="http://c">列表3</a></li>
    </ul>
    <div class="content">

    </div>
</body>
</html>

 

 

onmousedown、onmouseup 以及 onclick 事件

onmousedown、onmouseup 以及 onclick 事件是鼠标点击的全部过程。首先当某个鼠标按钮被点击时,触发 onm ousedown 事件,然后,当鼠标按钮被松开时,会触发 onm ouseup 事件,最后,当鼠标点击完成时,触发 onclick 事件。

 

 

 

Option 和 Select 对象

var select=document.querySelector("select");         // select.onclick=function(){         //     console.log(this.value);         // }         select.onchange=function(){             console.log(this.value);         }         }   <select name="" id="" size="1" >         <option value="1">选项1</option>         <option value="2">选项2</option>         <option value="3">选项3</option>     </select>    

面试题:

 

46. 添加 删除 替换 插入到某个接点的方法(DOM 的增删改查) (1) 创建新节点 1) createDocumentFragment() // 创建一个 DOM 片段 2) createElement() // 创建一个具体的元素 3) createTextNode() // 创建一个文本节点 (2) 添加、移除、替换、插入 1) appendChild() 2) removeChild() 3) replaceChild() 4) insertBefore() // 在已有的子节点前插入一个新的子节点 (3) 查找 1) getElementsByTagName() // 通过标签名称 2) getElementsByName() // 通过元素的 Name 属性的值(IE 容错能力较强,会得到一个数 组, 其中包括 id 等于 name 值的) 3) getElementById() // 通过元素 Id,唯一性 47. ”==”和“===”的不同 (1) ==之比较“转化成同一类型后的值”看“值”是否相等 (2) ===如果类型不同,其结果就是不等 48. eval 是做什么的 (1) 它的功能是把对应的字符串解析成 JS 代码并运行; (2) 应该避免使用 eval,不安全,非常耗性能( 2 次,一次解析成 js 语句,一次执行)。49. undefined,null 有什么区别? (1) null 表示"没有对象",即该处不应该有值,转为数值时为 0。典型用法是: 1) 作为函数的参数,表示该函数的参数不是对象。 2) 作为对象原型链的终点。 (2) undefined 表示"缺少值",就是此处应该有一个值,但是还没有定义,转为数值时为 NaN。典 型用法是: 1) 变量被声明了,但没有赋值时,就等于 undefined。 2) 调用函数时,应该提供的参数没有提供,该参数等于 undefined。 3) 对象没有赋值的属性,该属性的值为 undefined。 4) 函数没有返回值时,默认返回 undefined。 50. typeof 操作符返回值有哪些,对 undefined、null、NaN 使用这个操作 符分别返回什么 (1) typeof 的返回值有 undefined、boolean、string、number、object、function、symbol。 (2) 对 undefined 使用返回 undefined、null 使用返回 object,NaN 使用返回 number

 

 

 

这篇关于JavaScript DOM的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!