JavaScrip——BOM编程

news2025/4/3 18:16:55

一、BOM核心对象与导航控制

1. location对象:页面跳转与刷新

// 跳转到指定URL
location.href = "https://example.com"; 

// 刷新当前页面
location.reload(); 

// 示例:点击按钮跳转
document.querySelector("#btn").onclick = () => {
  location.href = "detail.html";
};

2. history对象:历史记录管理

history.back();     // 返回上一页
history.forward();  // 前进下一页
history.go(-2);     // 后退两步

// 示例:返回主页的链接
<a href="javascript:history.back()">返回主页面</a>

二、DOM元素访问三剑客

方法作用域返回类型适用场景
getElementById()单个元素HTMLElement精确匹配ID的元素
getElementsByName()同名元素集合NodeList表单元素批量操作
getElementsByTagName()标签元素集合HTMLCollection操作同类标签元素

实战示例

// 批量获取输入框内容
function collectInputs() {
  const inputs = document.getElementsByTagName("input");
  let values = [];
  for (let input of inputs) {
    values.push(input.value);
  }
  return values.join(", ");
}

// 操作同名复选框
function toggleCheckboxes(checked) {
  const checkboxes = document.getElementsByName("product");
  checkboxes.forEach(checkbox => checkbox.checked = checked);
}

三、元素显示与隐藏控制

1. visibility vs display

属性特点适用场景
visibility隐藏元素但保留占位空间需要保持布局稳定时
display完全移除元素不占空间动态切换显示状态

切换菜单显示

function toggleMenu(menuId) {
  const menu = document.getElementById(menuId);
  menu.style.display = menu.style.display === "none" ? "block" : "none";
}

2. 树形菜单实现

<ul id="mainMenu">
  <li onclick="toggleMenu('subMenu1')">前端技术</li>
  <ul id="subMenu1" style="display:none">
    <li>HTML</li>
    <li>CSS</li>
  </ul>
</ul>
运行 HTML

四、TAB切换效果开发

实现思路

  1. 通过display:none隐藏所有内容区块

  2. 使用事件监听触发切换

  3. 动态修改目标元素的display属性

代码示例

function switchTab(tabId) {
  // 隐藏所有内容
  const tabs = document.getElementsByClassName("tab-content");
  for (let tab of tabs) {
    tab.style.display = "none";
  }
  // 显示目标内容
  document.getElementById(tabId).style.display = "block";
}
<div class="tabs">
  <button onclick="switchTab('tab1')">商品详情</button>
  <button onclick="switchTab('tab2')">用户评价</button>
</div>
<div id="tab1" class="tab-content">...</div>
<div id="tab2" class="tab-content" style="display:none">...</div>
运行 HTML

五、复选框全选功能

实现原理

  1. 获取所有目标复选框

  2. 根据全选框状态批量设置

function toggleAll(checkbox) {
  const items = document.getElementsByName("product");
  items.forEach(item => item.checked = checkbox.checked);
}
<input type="checkbox" id="checkAll" onchange="toggleAll(this)">
<label>全选</label>

<div class="products">
  <input type="checkbox" name="product"> 商品A
  <input type="checkbox" name="product"> 商品B
</div>
运行 HTML

六、最佳实践与性能优化

  1. 减少DOM操作:缓存查询结果

    // 错误写法:每次循环都查询DOM
    for (let i=0; i<10; i++) {
      document.getElementById("item").style.color = "red";
    }
    
    // 正确写法:缓存元素
    const item = document.getElementById("item");
    for (let i=0; i<10; i++) {
      item.style.color = "red";
    }
  2. 事件委托优化

    document.querySelector(".tab-bar").addEventListener("click", e => {
      if (e.target.tagName === "BUTTON") {
        switchTab(e.target.dataset.tab);
      }
    });
  3. 现代API替代方案

    // 使用querySelectorAll简化查询
    document.querySelectorAll(".product-checkbox");
    
    // 使用classList操作样式
    element.classList.toggle("active");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2327392.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【leetcode100】每日温度

1、题目描述 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 示例 1: 输…

<贪心算法>

前言&#xff1a;在主包还没有接触算法的时候&#xff0c;就常听人提起“贪心”&#xff0c;当时是layman&#xff0c;根本不知道说的是什么&#xff0c;以为很难呢&#xff0c;但去了解一下&#xff0c;发现也不过如此嘛&#xff08;bushi)&#xff0c;还以为是什么高级东西呢…

基于银河麒麟桌面服务器操作系统的 DeepSeek本地化部署方法【详细自用版】

一、3种方式使用DeepSeek 1.本地部署 服务器操作系统环境进行,具体流程如下(桌面环境步骤相同): 本例所使用银河麒麟高级服务器操作系统版本信息: (1)安装ollama 方式一:按照ollama官网的下载指南,执行如下命令: curl -fsSL https://ollama.com/install.sh | sh方…

「2025最新版React+Ant Design+Router+TailwindCss全栈攻略:从零到实战,打造高颜值企业级应用

一站式掌握最新技术栈&#xff01;手把手教你配置路由、集成UI组件库、高效开发秘籍大公开 ReactAntrouteraxiosmocktailwind css等组合安装使用教程 官网&#xff1a;React Native 中文网 使用React来编写原生应用的框架 一&#xff0c;安装 npx create-react-app my-app …

Ubuntu 24.04.2 LTS 系统安装python,创建虚拟环境

在 Ubuntu 24.04.2 LTS 系统中&#xff0c;系统本身自带了 Python 3&#xff0c;不过你还是可以按照下面的步骤来安装和配置 Python 环境。 1. 检查系统自带的 Python 版本 在终端中输入以下命令查看系统自带的 Python 版本&#xff1a; python3 --version如果显示了 Python…

redis7.0搭建redis-cluster集群部署实战

环境 基于3台centos服务 host节点1端口节点2端口master70007001slave170007001slave270007001 安装redis&#xff0c;以及环境准备 安装可以参考https://blog.csdn.net/tao1992/article/details/132614567 安装路径设置了/usr/local/redis 分别在3台服务器上执行 #配置文…

CMake学习--如何在CMake中编译静态库、动态库并在主程序中调用

目录 一、背景知识二、使用方法&#xff08;一&#xff09;编译静态库&#xff08;二&#xff09;编译动态库&#xff08;三&#xff09;在主程序中调用库 三、总结 一、背景知识 在C/C开发中&#xff0c;库&#xff08;Library&#xff09;是预先编译好的代码集合&#xff0c…

安美数字酒店宽带运营系统存在SQL注入漏洞

免责声明&#xff1a;本号提供的网络安全信息仅供参考&#xff0c;不构成专业建议。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权&#xff0c;请及时与我联系&#xff0c;我将尽快处理并删除相关内容。 漏洞描述 安美数字酒店宽带运营系统的lang…

ubuntu18 server版花屏问题

新搞了一台dellT150的塔式服务器&#xff0c;装的ubuntu18 server版。 开机后遇到花屏&#xff0c;或者卡在开机界面的问题&#xff0c;和售后技术沟通这个情况是ubuntu自带的显卡驱动包兼容问题。需要做如下设置&#xff1a; 解决&#xff1a; 1.开机&#xff0c;连续按下e…

基于神经网络的肾脏疾病预测模型

构建一个基于神经网络的肾脏疾病预测模型 1. 数据预处理 ​加载数据&#xff1a;读取 kidney_disease.csv 文件&#xff0c;加载患者医疗数据。​删除冗余特征&#xff1a;移除与预测目标无关的列&#xff08;如 al, su 等&#xff09;&#xff0c;保留关键特征&#xff08;如…

I/O多路复用 + Reactor和Proactor + 一致性哈希

网络系统 1. I/O多路复用1&#xff09;原始Socket模型通信方式2&#xff09;多进程模型3&#xff09;多线程模型4&#xff09;I/O多路复用select/pollepoll边缘触发和水平触发 2. Reactor和Proactor1&#xff09;Reactor模式2&#xff09;Reactor模式四种方案3&#xff09;单Re…

解决小程序video控件在真机和上线后黑屏不播放问题

小程序上线后&#xff0c;mp4格式的视频无法点击是黑屏&#xff0c;但是测试得时候在微信开发者工具中能够打开正常播放 原因&#xff1a;编码格式不能是vp9 微信开发者工具本地设置中把这个打开勾选。 排查&#xff1a;可以换一个视频尝试能不能真机播放&#xff0c;如果能&a…

java项目分享-分布式电商项目附软件链接

今天来分享一下github上最热门的开源电商项目安装部署&#xff0c;star 12.2k&#xff0c;自行安装部署历时两天&#xff0c;看了这篇文章快的话半天搞定&#xff01;该踩的坑都踩完了&#xff0c;软件也打包好了就差喂嘴里。 项目简介 mall-swarm是一套微服务商城系统&#xf…

【LVS】负载均衡群集部署(DR模式)

部署前IP分配 DR服务器&#xff1a;192.168.166.101 vip&#xff1a;192.168.166.100 Web服务器1&#xff1a;192.168.166.104 vip&#xff1a;192.168.166.100 Web服务器2&#xff1a;192.168.166.107 vip&#xff1a;192.168.166.100 NFS服务器&#xff1a;192.168.166.108 …

链表的操作-反转链表

链表 160相交链表 代码 class Solution { public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode* h1headA;ListNode* h2headB;while(h1&&h2){if(h1!h2){h1h1->next;h2h2->next;}else{return h1;}}if(h1nullptr){h1headB;}else{h…

Linux安装Cmake (Centos 7.9)

cmake安装 这个虽然已经更新到了4.0.0版本了&#xff0c;但是我们要用3.5版本的&#xff0c;因为这个比较稳定 官方地址&#xff1a;https://github.com/Kitware/CMake/releases/tag/v3.5.0&#xff0c;选择那个cmake-3.5.0-Linux-x86_64.tar.gz下载&#xff0c; 首先解压文…

Node.js v22.14.0 多平台安装指南:Windows、Linux 和 macOS 详细教程

Node.js作为现代Web开发的基石&#xff0c;持续为开发者带来性能提升和新特性支持。本文将详细介绍在Windows、macOS和Linux系统上安装最新Node.js的多种方法&#xff0c;助您快速搭建高效的JavaScript开发环境。 &#x1f4e6; 当前最新版本 截至2025年4月&#xff0c;Node.…

Netty源码—10.Netty工具之时间轮一

大纲 1.什么是时间轮 2.HashedWheelTimer是什么 3.HashedWheelTimer的使用 4.HashedWheelTimer的运行流程 5.HashedWheelTimer的核心字段 6.HashedWheelTimer的构造方法 7.HashedWheelTimer添加任务和执行任务 8.HashedWheelTimer的完整源码 9.HashedWheelTimer的总结…

鸿蒙项目笔记(1)

一、核心内容-商城 1、装饰器的拓展使用&#xff0c;基础组件的熟悉。 2、引入基础动画实战&#xff0c;页面属性动画、页面跳转动画、自定义页面翻页等。 3、一次开发&#xff0c;多端部署。 4、本地数据库实战&#xff0c;涉及多种本地数据存储方式。 5、路由导航&#…

*快排延伸-自省排序

此节是学有余力的人去看&#xff0c;如果没时间&#xff0c;不看也没关系&#xff0c;只要知道代码就可以了&#xff01; 自省排序的思路是自我侦测和反省&#xff0c;快速排序如果递归深度太深&#xff0c;其算法的效率可能被大幅度削弱&#xff0c;这就需要借助其他的算法进…