当前位置: 代码迷 >> 综合 >> WebAPI—DOM (HTTL、CSS、Java Script应用及案例)
  详细解决方案

WebAPI—DOM (HTTL、CSS、Java Script应用及案例)

热度:80   发布时间:2023-11-22 04:14:00.0

WebAPI—DOM (HTTL、CSS、Java Script应用)

1. DOM 基本概念

DOM 全称为 Document Object Model

一个页面的结构是一个树形结构,称为 DOM 树

2. 选择元素 querySelector

querySelector

querySelector 选择器选中的元素如果有多个,只能获取到其中的第一个

let div = document.querySelector('div');
// 使用 log 打印一个元素对象 (element), 此时看到的是 html 片段
console.log(div);
// 使用 dir 打印一个元素对象,此时就能看到里面的具体属性
console.dir(div);

querySelectorAll

可以选中多个元素返回一个“伪数组”

3. 事件 .onclick

用户的一些操作,就会触发事件。根据用户的操作,做出不同的响应

    <!-- 点击事件 --><input type="button" value="按钮" onclick="test()"><script>// 法一function test() {
      console.log("用户点击了按钮");}</script>
    <input type="button" value="按钮"><script>// 法二let button = document.querySelector('input');button.onclick = function () {
      console.log("用户点击了按钮");}</script>

其他标签也可以实现相同效果

    <style>div {
      width: 100px;height: 50px;text-align: center;line-height: 50px;background-color: gray;color: white;}div:active {
      background-color: orange;}</style><div>按钮</div><script>let button = document.querySelector('div');button.onclick = function () {
      console.log("用户点击了按钮");}</script>

4. 元素操作innerHTML

操作一个HTML对应的对象

  • 获取/修改 元素里面的内容

innerText 只能获取/修改元素里面的文本

innerHTML 可以获取/修改文本,也可以获取修改里面的嵌套的标签

let button = document.querySelector('div');
console.log(button.innerHTML);
button.innerHTML = '<span>按钮</span>';

?案例 - 显示/隐藏密码

    <input type="password" id="input"><input type="button" id="button" value="显示密码"><script>let input = document.querySelector('#input');let button = document.querySelector('#button');button.onclick = function() {
      if (input.type == 'text') {
      input.type = 'password';button.value = '隐藏密码';} else if (input.type == 'password') {
      input.type = 'text';button.value = '隐藏密码';}}</script>

?案例 - 自增

    <input type="text" id="number" value="0"><input type="button" value="自增" id="button"><script>let button = document.querySelector('#button');button.onclick = function() {
      let number = document.querySelector('#number');let value = parseInt(number.value);value += 1;number.value = value;}</script>

?案例-字体变化

    <div style="font-size: 20px;">这是一行字</div><script>// 先获取到 div 对象, 关联点击事件, let div = document.querySelector('div');div.onclick = function () {
      let fontSize = parseInt(div.style.fontSize);fontSize += 5;div.style.fontSize = fontSize + 'px';}</script>

?案例-夜间模式切换

    <!-- 切换夜间模式 --><style>.light {
      background-color: white;color: black;}.night {
      background-color: #666;color: #eee;}</style><div class="light">这是一大堆话<br>这是一大堆话<br></div><script>let div = document.querySelector('div');div.onclick = function() {
      if (div.className == 'light') {
      div.className = 'night';} else if (div.className == 'night') {
      div.className = 'light';}}</script>

5. 节点操作

新增节点 createElement

        let div = document.createElement('div');div.innerHTML = '这是一个div';div.style.fontSize = '30px';

插入节点 appendChild

不能重复插入,如果将同一个元素插入两次,则最终效果为最后一次插入的位置

appendChild 插入该类中最后位置

    <div class="container"></div><script>let div = document.createElement('div');div.innerHTML = '这是一个div';div.style.fontSize = '30px';let container = document.querySelector('.container');container.appendChild(div);</script>

insertBefore(要插入的元素, 插入的位置); 插入任意位置

    <div class="container"><div class="one">第一个元素</div><div class="two">第二个元素</div></div><script>let div = document.createElement('div');div.innerHTML = '这是一个div';div.style.fontSize = '30px';let container = document.querySelector('.container');// let two = document.querySelector('.two');let two = container.children[1];container.insertBefore(div, two);</script>

**删除节点 ** removeChild

		container.removeChild(div);

?案例-猜数字

<!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>猜数字游戏</title>
</head>
<body><input type="button" value="重新开始一局游戏" id="reset"><div><span>请输入要猜的数组:</span><input type="text" id="num"><input type="button" value="" id="guess"></div><div><span>已经猜的次数:</span><span id="count">0</span></div><div><span>猜的结果:</span><span id="result"></span></div><script>// 先把需要用到的 JS 对象准备好let resultButton = document.querySelector('#reset');let numInput = document.querySelector('#num');let guessButton = document.querySelector('#guess');let countSpan = document.querySelector('#count');let resultSpan = document.querySelector('#result');// 生成一个 1-100 之间的随机的整数let toGuess = Math.floor(Math.random()*100) + 1;let count = 0;console.log("toGuess: " + toGuess);guessButton.onclick = function() {
      // 用户点击 猜 这个按钮,首先先更新点击次数的显示count++;countSpan.innerHTML = count;// 读取到输入框的内容,进行判定let num = parseInt(numInput.value);console.log("num: " + num);if (num < toGuess) {
      resultSpan.innerHTML = '猜低了';resultSpan.style.color = 'red';} else if (num > toGuess) {
      resultSpan.innerHTML = '猜高了';resultSpan.style.color = 'orange';} else {
      resultSpan.innerHTML = '猜对了';resultSpan.style.color = 'green';}}resultButton.onclick = function() {
      // 把 toGuess 和 count 清空,同时重新生成一个随机的整数toGuess = Math.floor(Math.random()*100) + 1;count = 0;resultSpan.innerHTML = '';countSpan.innerHTML = '';numInput.value = '';}</script>
</body>
</html>

?案例-表白墙/留言板

<!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>表白墙</title>
</head>
<body><style>* {
      box-sizing: border-box;margin: 0;padding: 0;}.container {
      width: 600px;margin: 0 auto;}h1 {
      text-align: center;padding: 20px 0;}p {
      font-size: 12px;color: #666;padding: 10px 0;text-align: center;}.row {
      display: flex;height: 40px;align-items: center;justify-content: center;}.row span {
      width: 100px;}.row .edit {
      width: 200px;height: 36px;}.row .submit {
      width: 300px;height: 40px;color: #fff;background-color: orange;/* 去掉边框 */border: none;}.row .submit:active {
      background-color: green;}</style><div class="container"><h1>表白墙</h1><p>输入后点击提交,将会把消息显示在墙上</p><div class="row"><span>谁:</span><input type="text" class="edit"></div><div class="row"><span>对谁:</span><input type="text" class="edit"></div><div class="row"><span>说什么:</span><input type="text" class="edit"></div><div class="row"><input type="button" value="提交" class="submit"></div></div><script>let submitButton = document.querySelector('.submit');submitButton.onclick = function() {
      // 1. 获取到输入框里面的内容let edits = document.querySelectorAll('.edit');let from = edits[0].value;let to = edits[1].value;let message = edits[2].value;console.log(from + ", " + to + ", " + message);if (from == '' || to == '' || message == '') {
      return;}// 2. 根据输入框的内容,构造 HTML 元素,添加到页面中// 接下来的每个消息,都使用 div.row 来去表示let row = document.createElement('div');row.className = 'row';row.innerHTML = from + '对' + to + '说:' + message;let container = document.querySelector('.container');container.appendChild(row);// 3. 把上次输入的内容清空for (i = 0; i < 3; i++) {
      edits[i].value = '';}}</script>
</body>
</html>
  相关解决方案