为什么有了HTML 和 CSS 之后, 还需要JavaScript

JavaScript 在网页开发中的重要性体现在以下几个方面:

  1. 交互性与动态效果
    • JavaScript 可以使网页具有丰富的交互功能和动态效果,如响应用户操作(点击、输入等)、动态更新内容、实现动画效果等。通过 JavaScript,可以使用户与网页更加互动,提升用户体验和页面的吸引力。
  2. 数据操作与处理
    • JavaScript 可以处理和操作网页上的数据,包括表单验证、数据的异步获取和提交、数据的动态展示和修改等。这使得网页不仅仅是静态展示内容,还可以根据用户输入和后端数据进行动态调整。
  3. DOM 操作
    • JavaScript 可以直接操作网页文档对象模型(DOM),通过选择元素、修改属性、添加事件监听器等方式实现对网页结构和样式的控制。这使得开发者可以根据具体需求动态修改页面内容和样式。
  4. 异步请求与服务器交互
    • JavaScript 可以通过异步请求(如 AJAX、Fetch API)与服务器进行数据交互,获取数据并将其展示在页面上,或者将用户输入提交到服务器端进行处理。这种能力使得网页可以实现更加复杂和实时的功能。
  5. 跨平台兼容性
    • JavaScript 是一种跨平台的脚本语言,在不同的浏览器和操作系统上都可以运行。这使得开发者可以通过 JavaScript 编写一次代码,并在多个平台上进行部署和运行。
  6. 丰富的生态系统和库支持
    • JavaScript 拥有庞大的生态系统,包括丰富的开源库和框架(如React、Vue.js、jQuery等),这些库和框架大大简化了开发复杂的应用程序和实现特定功能的难度。

总结来说,虽然 HTML 和 CSS 负责网页的结构和样式,但 JavaScript 则赋予了网页动态性和交互性,使得网页不再是静态的信息展示,而是可以根据用户的操作和后端数据动态调整和更新内容,从而提升用户体验和功能的丰富性。

javaScript 常用函数

JavaScript 中有一些非常常用的内置函数,涵盖了从数据处理到DOM操作等多个方面。以下是一些常见的 JavaScript 常用函数示例:

  1. 数据类型判断与转换
    • typeof: 返回一个表示数据类型的字符串。
    typeof 42; // "number"
    typeof "hello"; // "string"
    typeof true; // "boolean"
    typeof {}; // "object"
    typeof []; // "object"
    typeof undefined; // "undefined"
    typeof null; // "object"
    • parseIntparseFloat: 将字符串转换为整数或浮点数。
    parseInt("10"); // 10
    parseFloat("3.14"); // 3.14
  2. 数组操作
    • Array.isArray: 判断一个对象是否为数组。
    Array.isArray([1, 2, 3]); // true
    Array.isArray({}); // false
    • Array.prototype.map: 对数组的每个元素执行提供的函数,并返回一个新数组。
    let numbers = [1, 2, 3];
    let doubled = numbers.map(num => num * 2);
    // doubled 现在是 [2, 4, 6]
    • Array.prototype.filter: 创建一个新数组,包含通过指定函数测试的所有元素。
    let evenNumbers = numbers.filter(num => num % 2 === 0);
    // evenNumbers 现在是 [2]
  3. 字符串操作
    • String.prototype.length: 返回字符串的长度。
    "Hello".length; // 5
    • String.prototype.split: 将字符串分割成字符串数组。
    "apple,orange,banana".split(","); // ["apple", "orange", "banana"]
    • String.prototype.trim: 删除字符串两端的空白字符。
    "   hello   ".trim(); // "hello"
  4. 函数式编程
    • Array.prototype.reduce: 对数组中的每个元素执行一个由您提供的函数,并将其结果汇总为单个值。
    let sum = [1, 2, 3].reduce((accumulator, currentValue) => accumulator + currentValue, 0);
    // sum 现在是 6
  5. DOM 操作
    • document.getElementById: 返回对拥有指定 ID 的第一个对象的引用。
    let element = document.getElementById('myElement');
    • addEventListener: 添加事件监听器到一个元素上。
    element.addEventListener('click', function() {
        console.log('Element clicked!');
    });
  6. 日期与时间
    • Date: 创建一个表示当前时间的对象。
    let now = new Date();
    console.log(now.getFullYear()); // 当前年份
  7. 异步操作
    • setTimeoutsetInterval: 分别在指定的时间间隔后执行一次或定期执行代码。
    setTimeout(() => {
        console.log('Timeout executed');
    }, 1000);
    
    setInterval(() => {
        console.log('Interval executed every second');
    }, 1000);

这些函数涵盖了 JavaScript 开发中常见的基本操作和常用技巧,是每个 JavaScript 开发者日常工作中的必备工具。

JavaScript 常见代码段

JavaScript 中的常用代码段可以涵盖多个领域,从基础操作到高级技巧都有。以下是一些常见的 JavaScript 代码段示例:

  1. 变量声明与赋值

    // 声明变量
    let name = 'Alice';
    const PI = 3.14;
    var count = 0;
    
    // 数组与对象
    let numbers = [1, 2, 3];
    let person = { name: 'Bob', age: 30 };
  2. 条件语句

    // if-else
    if (age >= 18) {
        console.log('成年人');
    } else {
        console.log('未成年人');
    }
    
    // switch-case
    switch (day) {
        case 1:
            console.log('星期一');
            break;
        case 2:
            console.log('星期二');
            break;
        default:
            console.log('其他');
    }
  3. 循环

    // for 循环
    for (let i = 0; i < 5; i++) {
        console.log(i);
    }
    
    // while 循环
    let count = 0;
    while (count < 10) {
        console.log(count);
        count++;
    }
  4. 函数定义与调用

    // 定义函数
    function greet(name) {
        return `Hello, ${name}!`;
    }
    
    // 调用函数
    let greeting = greet('Alice');
    console.log(greeting); // 输出 "Hello, Alice!"
  5. 数组操作

    // 迭代数组
    let numbers = [1, 2, 3, 4, 5];
    numbers.forEach(num => {
        console.log(num);
    });
    
    // 数组映射
    let doubled = numbers.map(num => num * 2);
    console.log(doubled); // 输出 [2, 4, 6, 8, 10]
    
    // 数组过滤
    let evenNumbers = numbers.filter(num => num % 2 === 0);
    console.log(evenNumbers); // 输出 [2, 4]
  6. 异步操作

    // Promise
    function fetchData() {
        return new Promise((resolve, reject) => {
            // 异步操作
            setTimeout(() => {
                resolve('Data fetched successfully');
            }, 2000);
        });
    }
    
    // 使用 async/await
    async function fetchDataAsync() {
        try {
            let result = await fetchData();
            console.log(result);
        } catch (error) {
            console.error('Error fetching data:', error);
        }
    }
    
    fetchDataAsync();
  7. DOM 操作

    // 获取元素
    let element = document.getElementById('myElement');
    
    // 添加事件监听器
    element.addEventListener('click', function() {
        console.log('Element clicked!');
    });
    
    // 修改元素内容
    element.innerHTML = 'New content';

Javascript 简单例子

当涉及到使用 JavaScript 时,有许多常见的例子可以展示其功能和应用。以下是一些典型的 JavaScript 使用示例:

  1. 表单验证
 <form id="myForm">
     <input type="text" id="username" placeholder="Username">
     <input type="password" id="password" placeholder="Password">
     <button type="submit">Submit</button>
 </form>

 <script>
     document.getElementById('myForm').addEventListener('submit', function(event) {
         event.preventDefault(); // 阻止表单默认提交行为
         let username = document.getElementById('username').value;
         let password = document.getElementById('password').value;
         
         // 简单示例:检查用户名和密码是否符合要求
         if (username.length < 6 || password.length < 8) {
             alert('Username must be at least 6 characters and password must be at least 8 characters.');
         } else {
             alert('Form submitted successfully!');
             // 这里可以加入提交逻辑
         }
     });
 </script>
  1. 动态内容更新
 <p id="demo">Hello, World!</p>

 <button onclick="changeText()">Change Text</button>

 <script>
     function changeText() {
         document.getElementById('demo').innerHTML = 'Hello, JavaScript!';
     }
 </script>
  1. 异步数据获取
 <div id="posts"></div>

 <script>
     fetch('https://jsonplaceholder.typicode.com/posts')
         .then(response => response.json())
         .then(data => {
             let posts = document.getElementById('posts');
             data.forEach(post => {
                 let p = document.createElement('p');
                 p.textContent = post.title;
                 posts.appendChild(p);
             });
         })
         .catch(error => console.error('Error fetching data:', error));
 </script>
  1. 交互性元素
 <button onclick="showAlert()">Click Me</button>

 <script>
     function showAlert() {
         alert('Button clicked!');
     }
 </script>
  1. 简单动画效果
 <div id="box" style="width: 100px; height: 100px; background-color: red;"></div>

 <script>
     let box = document.getElementById('box');
     box.addEventListener('mouseover', function() {
         box.style.backgroundColor = 'blue';
     });

     box.addEventListener('mouseout', function() {
         box.style.backgroundColor = 'red';
     });
 </script>

这些例子展示了 JavaScript 在不同场景下的应用,包括表单验证、动态内容更新、异步数据获取、交互性元素和简单动画效果。JavaScript 的灵活性和强大功能使得开发者可以根据需求实现各种复杂的功能和用户交互。

Document Object Model

Document Object Model (DOM) 是一种针对文档的对象模型,它描述了文档的结构化表示,并提供了一种可以访问和操作文档内容的方式。DOM 将 HTML 或 XML 文档视为一个由节点(node)组成的层次结构,每个节点表示文档中的不同部分(如元素、属性、文本等),并且节点之间存在特定的关系和属性。

DOM 做什么

具体来说:

HTML 内容:指的是 HTML 文档中的标记、文本内容和各种元素(如

等),以及这些元素的属性和内容。

DOM 操作:是指通过 JavaScript 或其他编程语言来操作 DOM 树的结构,包括选择节点、修改节点的属性或内容、添加或删除节点等。例如,通过 DOM 操作可以动态地创建、修改或删除 HTML 元素,响应用户的交互事件(如点击、输入等),或者实现页面的动态更新和内容的改变。

DOM 和 HTML 的关系:HTML 是用于描述页面结构和内容的标记语言,而浏览器解析 HTML 后会创建对应的 DOM 树,这个 DOM 树是 JavaScript 和浏览器 API 操作的对象模型。通过 DOM,开发人员可以以编程方式访问和修改页面内容,而不仅限于静态的 HTML 内容。

DOM 的重要内容包括:

  1. 节点层次结构
    • 文档节点(Document Node):整个文档的根节点。
    • 元素节点(Element Node):HTML 元素,如 <div><p> 等。
    • 文本节点(Text Node):元素中的文本内容。
    • 属性节点(Attribute Node):元素的属性,如 idclass 等。
  2. DOM API
    • 访问和修改节点:通过 DOM API 可以选择特定节点、修改其内容、添加或删除节点等操作。
    • 事件处理:DOM 提供事件模型,允许 JavaScript 对用户交互(如点击、输入等)作出响应。
    • 样式操作:可以动态修改元素的样式(如颜色、大小等),以及 CSS 类的管理。
    • 文档遍历:可以遍历整个文档结构,查找特定节点或元素。
  3. 动态 HTML
    • 创建新元素:可以使用 DOM API 动态创建新的 HTML 元素,并将其插入到文档中。
    • 动态修改内容:可以通过 JavaScript 修改文档的内容,从而实现动态页面效果。
  4. 跨平台性
    • DOM 是与平台和编程语言无关的标准。无论是在浏览器环境下的 JavaScript,还是在服务器端的 JavaScript(如 Node.js),都可以使用相同的 DOM 操作方法。
  5. 重要性
    • 网页交互性:DOM 提供了与用户交互和响应用户操作的基础。
    • 动态页面:通过 DOM,可以实现页面的动态更新和内容的动态生成,为 Web 应用提供了丰富的交互体验。
    • 前端开发基础:对于前端开发人员而言,理解和熟练掌握 DOM 是编写现代 Web 应用的基础之一。

DOM 的理解和使用对于 Web 开发人员非常重要,它不仅影响到页面的交互性和用户体验,还直接关系到 Web 应用的性能和可维护性。

DOM 常用代码片段

以下是一些常用的 DOM 操作代码片段,涵盖了从选择元素到修改内容、添加事件监听器等常见操作:

1. 选择元素

通过 ID、类名、标签名等方式选择元素。

// 通过 ID 选择元素
const elementById = document.getElementById('elementId');

// 通过类名选择元素(返回 NodeList)
const elementsByClass = document.getElementsByClassName('className');

// 通过标签名选择元素(返回 NodeList)
const elementsByTag = document.getElementsByTagName('tagname');

// 通过 CSS 选择器选择元素(返回第一个匹配的元素)
const elementBySelector = document.querySelector('selector');

// 通过 CSS 选择器选择元素列表(返回所有匹配的元素)
const elementsBySelectorAll = document.querySelectorAll('selector');

2. 修改元素内容和属性

修改元素的文本内容、HTML 内容和属性。

// 获取元素
const element = document.getElementById('elementId');

// 修改文本内容
element.textContent = '新的文本内容';

// 修改 HTML 内容
element.innerHTML = '<p>新的 HTML 内容</p>';

// 修改元素属性
element.setAttribute('class', 'newClass');

3. 添加和移除元素

动态添加和移除元素。

// 创建新元素
const newElement = document.createElement('div');
newElement.textContent = '新创建的元素';

// 添加到文档中的特定位置
document.body.appendChild(newElement); // 添加到文档末尾
parentElement.insertBefore(newElement, referenceElement); // 在参考元素前插入

// 移除元素
const elementToRemove = document.getElementById('elementId');
elementToRemove.parentNode.removeChild(elementToRemove);

4. 添加事件监听器

响应用户交互事件(如点击、输入等)。

const button = document.getElementById('myButton');

// 添加点击事件监听器
button.addEventListener('click', function(event) {
console.log('按钮被点击了!');
});

// 添加输入事件监听器
const input = document.getElementById('myInput');
input.addEventListener('input', function(event) {
console.log('输入框内容变化了:', event.target.value);
});

5. 遍历和操作节点

遍历 DOM 结构中的节点,执行相应操作。

// 遍历子节点
const parent = document.getElementById('parentElement');
const children = parent.childNodes;
children.forEach(function(child) {
// 操作子节点
});

// 查找父节点
const child = document.getElementById('childElement');
const parent = child.parentNode;

// 查找下一个兄弟节点
const nextSibling = child.nextSibling;

// 删除所有子节点
while (parent.firstChild) {
parent.removeChild(parent.firstChild);
}

常用的 DOM 模板通常涉及创建和操作 HTML 元素,可以帮助快速生成动态内容或构建复杂的用户界面。以下是几个常见的 DOM 模板示例:

1. 创建新元素

// 创建新的 <div> 元素
const newDiv = document.createElement('div');

// 添加类名和文本内容
newDiv.className = 'my-class';
newDiv.textContent = '新的 div 元素';

// 添加到文档中的特定位置
document.body.appendChild(newDiv); // 添加到文档末尾

2. 使用模板字符串创建 HTML 片段

// 使用模板字符串创建 HTML 片段
const html = `
<div class="card">
  <h3>Title</h3>
  <p>Description</p>
</div>
`;

// 将 HTML 片段插入到文档中
document.getElementById('container').innerHTML = html;

3. 动态生成列表

// 数据数组
const items = ['Item 1', 'Item 2', 'Item 3'];

// 创建 <ul> 列表
const ul = document.createElement('ul');

// 遍历数组生成 <li> 元素并添加到 <ul> 列表中
items.forEach(item => {
const li = document.createElement('li');
li.textContent = item;
ul.appendChild(li);
});

// 将 <ul> 列表插入到文档中的特定位置
document.getElementById('list-container').appendChild(ul);

4. 使用 DocumentFragment 批量插入元素

// 创建 DocumentFragment
const fragment = document.createDocumentFragment();

// 数据数组
const items = ['Item 1', 'Item 2', 'Item 3'];

// 循环创建 <li> 元素并添加到 DocumentFragment
items.forEach(item => {
const li = document.createElement('li');
li.textContent = item;
fragment.appendChild(li);
});

// 将 DocumentFragment 一次性插入到文档中
document.getElementById('list-container').appendChild(fragment);

5. 使用模板函数生成复杂结构

// 模板函数,接受数据对象,返回 HTML 字符串
function createCard(data) {
return `
  <div class="card">
    <h3>${data.title}</h3>
    <p>${data.description}</p>
  </div>
`;
}

// 数据数组
const cardsData = [
{ title: 'Card 1', description: 'Description 1' },
{ title: 'Card 2', description: 'Description 2' },
{ title: 'Card 3', description: 'Description 3' }
];

// 使用模板函数生成多个卡片并插入到文档中
const cardsHtml = cardsData.map(createCard).join('');
document.getElementById('cards-container').innerHTML = cardsHtml;

这些模板示例可以根据需要进行修改和扩展,用于动态生成复杂的 DOM 结构或更新页面内容,提升 Web 应用的交互性和用户体验。