javaScript核心学习 (三)DOM对象学习

接下来就要进入DOM的学习了,配合插图,表格,示例代码以及运行效果的展示,可以清楚的知道需要掌握的知识点。

一.DOM对象的认识

1.简单介绍

  1. dom全称为Document Object Model,文档对象模型。
  2. DOM是一种用于表示和操作HTML、XML或XHTML文档的标准编程接口。DOM将一个文档表示为一个树状结构,其中每个节点表示文档中的一个元素、属性、文本等。

2.节点树

  1. 节点(Node):DOM树中的每个元素、属性、文本都被表示为一个节点。节点可以有子节点和父节点,形成了树的结构。
  2. 划分:
    元素节点(Element Node):表示HTML或XML文档中的元素,如等。
    文本节点(Text Node):表示HTML或XML文档中的文本内容。
    属性节点(Attribute Node):表示HTML或XML元素的属性,如id、class等。
  3. 各节点之间关系:
    根节点(Root Node):DOM树的顶层节点,通常是文档的节点。
    父节点(Parent Node):一个节点的直接上级节点。
    子节点(Child Node):一个节点的直接下级节点。
    兄弟节点(Sibling Node):具有同一父节点的节点。

如图所示:在这里插入图片描述

二.获取元素的操作

1.利用document对象的方法

1.1 使用

方法说明
document.getElementById()返回指定id的第一个对象的引用
document.getElementByName()返回指定名称的对象集合
document.getElementByTagName()返回指定标签名的对象集合
document.getElementByClassName()返回指定类名的对象集合
  • 通过这个表,我们不难发现,除了第一个是返回对象的引用,别的都是返回一个对象集合,所以document.getElementById()是我们使用比较多的。
  • 其中HTML5中还新增了一个document.querySelector()的方法,语言可以获取。

1.2 代码示例

<body>
//简单创建三个div
<div id="box">box</div>>
<div class="bar">bar</div>
<div name="main">main</div>
<script>
     //通过id获取对象
    console.log(document.getElementById("box"));
     //通过类名获取对象集合
    console.log(document.getElementsByClassName("bar"));
     //通过标签名获取所有的div对象集合
    console.log(document.getElementsByTagName("div"));
    //通过name获取所有为main的对象集合
     console.log(document.getElementsByName("main"));
</script>
</body>

1.3 效果

在这里插入图片描述
可以看到为对象集合的几个都有索引,想要精准定位可以根据集合的索引来。

2.利用document对象的属性

2.1使用方法

属性说明
document.body返回文档的body元素
document.documentElement返回文档的html元素
document.forms返回文档所有form对象的引用
document.images返回文档所有image对象的引用

2.2对比

其中document对象的方法也可以获取标签的对象引用,两者获取的是同一对象:

<script>
    //通过方法获取body对象
    var body=document.getElementsByTagName('body')[0];
    //通过属性获取对比
    console.log(document.body===body);  //结果返回true   
</script>

三.修改元素内容

1.元素属性

  • innnerHTML:设置或者返回元素开始和结束标签之间的HTML(作用范围是比较大的)
  • innerText:设置或返回元素中去除所有标签的内容
  • textContent:设置或者返回指定节点的文本内容(作用范围最小)

还有我们之前就常使用的向文档写入指定内容的方法:document.write()和document.writeln()

2.代码示例

我们用这个来实现改变盒子的大小,单击盒子单数变大,偶数变小,其中文字也变。

<body>
<div class="box" id="box"></div>
<script>
    var box=document.getElementById('box');
    var i=0;
    box.onclick=function (){
        ++i;
        if (i%2){
            this.style.width='200px';
            this.style.height='200px';
            this.innerHTML='大';
        }else {
            this.style.width='50px';
            this.style.height='50px';
            this.innerHTML='小';
        }
    }
</script>
</body>

在这里插入图片描述
其中元素样式的知识可以回顾一下css的知识点,或者帮助文档。点击后,偶数如下:
在这里插入图片描述

四.节点的操作

1.获取节点

1.1基本属性

  • 访问子节点:firstChild(首个子节点);lastChild(最后一个子节点)
  • 访问当前节点:nodeName(节点的名称);nodeValue(节点的值)
  • nextSibling:返回指定节点的后一个节点
  • previousSibling:返回指定节点的前一个节点
  • parentNode:访问当前元素节点的父节点
  • childNodes:访问当前元素结点的所有子节点的集合

1.2代码示例

<body>
<ul id="ul">
  <li>js</li>
  <li>dom</li>
  <li>bom</li>
  <li>xml</li>
<!--    这是一个注释-->
</ul>
<script>
    //访问document的第一个子节点
    console.log(document.firstChild);    //应该为<! DOCTYPE html>
    //访问document的第二个子节点
    console.log(document.firstChild.nextSibling);
    //查看ul下面的所有子节点
    var ull=document.getElementById("ul");
    console.log(ull.childNodes);
    //查看ul的父节点
    console.log(ull.parentNode);
</script>
</body>

在这里插入图片描述

2.添加节点

2.1 方法说明

方法名说明
document.createElement()创建元素节点
document.createTextNode()创建文本节点
document.createAttribute()创建属性节点
appendChild()在指定字节列表后添加节点
insertBeforet()插入到指定子节点之前
getAttributeNode()返回指定节点的属性节点
setAttributeNode()设置指定节点的属性节点

2.2代码示例

为了更好的掌握节点的追加和使用,接下来创建一个

元素节点,并为其添加文本和属性为例。

<body>
<script>
   //分别设置h2元素节点,文本结点,以及属性节点
  var h2=document.createElement('h2');
  var text=document.createTextNode('hello js!');
  var attr=document.createAttribute('align');
  //为属性节点赋值,属性节点必须要设置Value值
  attr.value='center';
  // 并将文本和属性添加到元素节点当中
  h2.setAttributeNode(attr);
  h2.appendChild(text);
  //将设置好的元素节点添加到body当中
  document.body.appendChild(h2);
</script>
</body>

输出如下:
在这里插入图片描述

3.删除节点

常用的删除方法,删除元素:removeChild(),删除属性值:removeAttributeNode()。
这个方法的使用,自己可以尝试写写就好了。

4.综合案例使用

编写了一个简单的购物车应用场景,但是还有一个小缺憾,就是添加商品时不能再原有购物车中的已有商品中添加数量,自己可以动手改善一下。

<!DOCTYPE html>
<html>
<head>
  <title>购物车应用</title>
  <style>
    #cart {
      margin-bottom: 20px;
    }
    .item {
      border: 1px solid #ccc;
      padding: 10px;
      margin-bottom: 10px;
    }
    .item__title {
      font-weight: bold;
    }
    .item__price {
      color: #666;
    }
    .add-btn,
    .remove-btn {
      border: none;
      background: #4caf50;
      color: #fff;
      padding: 4px 8px;
      margin-right: 8px;
      cursor: pointer;
    }
    .remove-btn {
      background: #f44336;
    }
  </style>
</head>
<body>
<h2>购物车应用</h2>

<div id="cart"></div>

<ul id="product-list">
  <li>
    <span class="item__title">商品 1</span>
    <span class="item__price">$10</span>
    <button class="add-btn">添加到购物车</button>
  </li>
  <br>
  <li>
    <span class="item__title">商品 2</span>
    <span class="item__price">$15</span>
    <button class="add-btn">添加到购物车</button>
  </li>
  <br>
  <li>
    <span class="item__title">商品 3</span>
    <span class="item__price">$20</span>
    <button class="add-btn">添加到购物车</button>
  </li>
</ul>

<script>
  var cartNode = document.getElementById('cart');
  var productList = document.getElementById('product-list');

  // 添加到购物车
  function addItemToCart(itemTitle, itemPrice) {
    var item = document.createElement('div');
    item.classList.add('item');

    var title = document.createElement('span');
    title.classList.add('item__title');
    title.textContent = itemTitle;

    var price = document.createElement('span');
    price.classList.add('item__price');
    price.textContent = itemPrice;

    var addButton = document.createElement('button');
    addButton.classList.add('add-btn');
    addButton.textContent = '添加';
    addButton.addEventListener('click', function() {
      increaseQuantity(item);
    });

    var removeButton = document.createElement('button');
    removeButton.classList.add('remove-btn');
    removeButton.textContent = '移除';
    removeButton.addEventListener('click', function() {
      decreaseQuantity(item);
    });

    var quantity = document.createElement('span');
    quantity.textContent = '1';

    item.appendChild(title);
    item.appendChild(price);
    item.appendChild(addButton);
    item.appendChild(removeButton);
    item.appendChild(quantity);

    cartNode.appendChild(item);
  }

  // 增加数量
  function increaseQuantity(item) {
    var quantityNode = item.querySelector('span:last-child');
    var quantity = parseInt(quantityNode.textContent);
    quantity++;
    quantityNode.textContent = quantity;
  }

  // 减少数量
  function decreaseQuantity(item) {
    var quantityNode = item.querySelector('span:last-child');
    var quantity = parseInt(quantityNode.textContent);
    quantity--;
    if (quantity === 0) {
      item.parentNode.removeChild(item);
    } else {
      quantityNode.textContent = quantity;
    }
  }

  // 绑定添加到购物车按钮的点击事件
  var addButtons = document.getElementsByClassName('add-btn');
  for (var i = 0; i < addButtons.length; i++) {
    addButtons[i].addEventListener('click', function() {
      var item = this.parentNode;
      var title = item.querySelector('.item__title').textContent;
      var price = item.querySelector('.item__price').textContent;
      addItemToCart(title, price);
    });
  }
</script>
</body>
</html>

效果如下:
在这里插入图片描述

五.小结

这一部分的内容,对于后续的学习十分关键,因为你不管是前端还是后端,DOM和BOM都是必须掌握的内容。后面还要学Vue,AJAx…都密切相连,正因为初学时自己一代而过,所有在学习Vue时总是要回去翻看之前的知识,所以又重新学习了一遍,于是有了这篇博客~。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱笑的蓝孩子~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值