前端入门进阶:DOM操作、事件处理与浏览器数据持久化实战
1. 实验14JavaScript事件处理与DOM操作实战1.1 为什么说这个实验是前端入门的分水岭做Web前端开发技术课程的实验14到16基本意味着你已经在HTML和CSS上摸爬滚打过一阵了。前13个实验里你大概已经能摆出漂亮的静态页面会调flex布局也会用浮动和定位但页面终究是“死”的。实验14开始JavaScript正式登场这是整个前端学习曲线里第一个真正的陡坡。很多人在这一步掉队不是智商问题而是没搞懂一个关键转变从“画页面”到“操作页面”。说得直白一点DOM操作和事件处理就是把页面从一张静态设计稿变成一个能和用户互动的活物。点击按钮弹出弹窗、鼠标滑过卡片变色、表单输入实时校验这些日常浏览网页时习以为常的交互底层全是这套东西在跑。实验14通常围绕这样几个核心任务展开获取DOM元素、监听用户行为、修改页面内容或样式。它的核心就两件事找到元素绑上事件。这个实验让我觉得最有价值的地方在于它逼着你改变思维方式。之前写HTML写完就完事了顶多检查下标签有没有闭合。但JS一进来你脑子里必须时刻保持一条线用户操作触发事件事件处理器被调用处理器里改写DOM。任何交互功能落到代码层面都是这三个环节的排列组合。把这个模型装进脑子里后面学什么都快。1.2 获取DOM元素的高频方法与选型心得实验14里必然要接触document.getElementById、document.getElementsByClassName、document.querySelector和document.querySelectorAll这套API。初学者最容易懵的就是这么多获取方法我到底该用哪个我的建议是课程作业用哪个都行但如果你想为后面接框架打基础尽早养成用querySelector和querySelectorAll的习惯。原因有三个。第一这两个API的参数是CSS选择器也就是说你在CSS里怎么写样式在JS里就怎么选元素心智负担最小。document.querySelector(.card .title)和CSS里的后代选择器写法完全一致。第二它返回的是静态的NodeList或第一个匹配元素行为更好预测。第三Vue、React这些框架的模板编译机制本质上也依赖类似的DOM查询与更新思路提前熟悉这套写法没坏处。但有一个坑必须提醒你querySelector只返回第一个匹配的元素如果页面上有多个同类元素都要绑事件你得用querySelectorAll然后用forEach遍历。我见过太多人栽在这上面——用querySelector拿了一堆元素结果只有第一个有反应其他全“没绑上”。!DOCTYPE html html langzh-CN head meta charsetUTF-8 title实验14 - 待办事项列表/title style .task-item { display: flex; justify-content: space-between; padding: 8px; border-bottom: 1px solid #eee; } .completed { text-decoration: line-through; color: #999; } /style /head body div idapp h2待办事项/h2 input typetext idtaskInput placeholder输入新任务 button idaddBtn添加/button ul idtaskList/ul /div script const input document.querySelector(#taskInput); const addBtn document.querySelector(#addBtn); const list document.querySelector(#taskList); addBtn.addEventListener(click, function () { const text input.value.trim(); if (text ) { alert(任务内容不能为空); return; } const li document.createElement(li); li.className task-item; li.innerHTML span${text}/spanbutton classdelBtn删除/button; list.appendChild(li); input.value ; }); list.addEventListener(click, function (e) { if (e.target.classList.contains(delBtn)) { e.target.parentElement.remove(); } }); /script /body /html上面这个待办事项列表就是实验14很典型的综合练习往输入框敲内容点按钮往列表里加一项点删除按钮去掉这一项。表面上功能很朴素但里面涉及的知识点一点都不少文本获取、内容判空、DOM节点的创建与追加、事件委托、事件对象的读取。建议做实验的时候不要照抄自己从头敲一遍卡住了再往回看。1.3 事件监听的三种写法与事件委托到底解决了什么问题事件监听的写法教材里一般会提三种。第一种是直接在HTML标签里写onclickfn()第二种是element.onclick fn第三种是element.addEventListener(click, fn)。前两种有个共同的毛病同一个事件只能挂一个处理器后写的会覆盖先写的。addEventListener是正统方案可以挂多个还能通过removeEventListener解绑做复杂交互时必须用它。但实验14真正拉开差距的知识点是事件委托。这个概念初学者第一次接触容易懵其实道理很朴素如果一堆子元素都要绑同一个事件与其给每一个子元素都绑一遍不如绑到它们共同的父元素上然后通过e.target判断触发点。// 不用事件委托每新增一个li都要重新给它绑删除事件 // 用事件委托父容器只绑一次新增的子元素自动“继承”事件处理能力 document.querySelector(#taskList).addEventListener(click, function (e) { if (e.target.classList.contains(delBtn)) { e.target.parentElement.remove(); } });这段代码带来的直接好处就是你新增了100个任务也不需要额外绑定任何事件。放在动态增删数据的场景里事件委托几乎是最优解。实验报告里如果能主动写上“这里采用了事件委托方案避免了重复绑定事件提升了性能和代码可维护性”评委一眼就能看出你比同龄人想得深一层。2. 实验15BOM与JavaScript进阶特性实战2.1 BOM操作在课程实验里的常考形态到了实验15学习重心开始从“操作页面上的元素”转向“与浏览器环境对话”。这里要掌握的核心对象无非是window、navigator、location、history、screen和timing那几样。课程设计这个实验通常是想让你完成某个偏工具型的页面比如倒计时跳转页、浏览器信息展示页或者一个简易的“系统提醒弹窗”。做这类实验时建议抓住一条主线BOM操作的本质是页面与浏览器环境的数据流通。window.location.href能读到当前地址也能改写到新地址navigator.userAgent能读到浏览器指纹信息setTimeout和setInterval能让页面产生时间维度上的动态行为。这些能力单独看都很简单但组合起来就能做出很实用的页面。实验15里我建议重点练习一个场景未保存提示。用beforeunload事件和window.confirm配合当用户准备离开一个填写了内容的表单页面时弹出确认框提醒。这个功能虽然短小但它同时用到了BOM事件、弹窗API和页面生命周期是实验报告里很有含金量的展示点。let isDirty false; const form document.querySelector(#infoForm); form.addEventListener(input, function () { isDirty true; }); window.addEventListener(beforeunload, function (e) { if (isDirty) { e.preventDefault(); e.returnValue 您有未保存的修改确定要离开吗; } });这段代码放在实验中讲解时可以说明e.preventDefault()并不足以在所有浏览器上触发系统确认框需要配合e.returnValue赋值这是兼容性处理的典型写法。2.2 作用域、闭包与let/const的实战语义辨析实验15通常还会顺带考察一批JavaScript语言本身的进阶特性。原因很实际没有这些语言基础做铺垫实验16那个综合项目根本写不动。很多同学在实验14做列表交互时还能用“函数套函数”糊弄过去但一到实验15涉及数据状态管理时就露馅了。最需要理清的是var、let、const三者的区别。var是函数作用域存在变量提升容易污染全局let和const是块级作用域有效避免了一堆隐蔽的冲突问题。实践里我几乎不用var写新代码一律const打底只有明确需要重新赋值时才改成let。这种习惯很多自学教程不会强调但面试和工程项目里非常看重。闭包概念更应该用实际例子去理解。实验15常见的“计数器按钮”练习就是个好的切入点function createCounter() { let count 0; return function () { count; return count; }; } const counter createCounter();count被返回的函数“记住”了就是闭包的直观体现。在实验报告里解释这个例子建议沿着“返回的匿名函数持有createCounter作用域中count变量的引用即使createCounter执行结束后count也不会被回收”这条线去写答得比教科书逐字背诵更容易拿高分。2.3 定时器与异步边界的初步体验实验15往往也会尝试性地引入setTimeout、setInterval甚至一些简单的异步回调。很多人在这里第一次体会到“JavaScript的执行顺序不按代码从上到下走”。这个阶段不需要理解特别深但要建立两个认知。第一多个定时器之间的触发顺序取决于时间队列而不是代码位置。第二递归调用setTimeout比直接使用setInterval更稳定——因为setInterval不管上一个任务是否执行完到点就塞新任务页面卡顿时任务会堆积setTimeout在上一次任务执行完毕后才开始计时能够自然规避积压问题。实验里如果要做一个轮播图自动播放强烈建议用递归setTimeout而不是setInterval。代码大致是let index 0; const slides document.querySelectorAll(.slide); function autoPlay() { index (index 1) % slides.length; slides.forEach((s, i) { s.style.display i index ? block : none; }); setTimeout(autoPlay, 3000); } setTimeout(autoPlay, 3000);这个写法比setInterval多几个字符但可靠性高了不少。实验报告里提到“采用链式setTimeout方案”这行字说明你已经在用工程思维写代码而不是只会照抄API。3. 实验16前端综合应用与表单数据管理实战3.1 实验16通常卡在哪个环节实验16一般都是阶段性大作业目标是把前面学的HTML、CSS、JavaScript串起来做一个完整的小应用。常见的选题包括学生信息管理系统、个人记账本、商品列表筛选、图书管理等等。这些课题的共同点是需要管理一组“数据”并且要把数据的增删改查结果实时反映到页面上。卡住大多数人的地方往往不是语法而是“数据在哪里维护”这个问题。页面上的每个输入框、每一行列表项本质都是数据的某个投影。但在原型中数据存到什么变量里、如何更新、如何重新渲染如果没有想明白代码很快就变成一团粥。我自己的习惯是先把“数据设计”写在纸上再动键盘。比如做学生信息管理先定义好一个数据结构let studentList []; let currentId 1; function addStudent(name, score) { studentList.push({ id: currentId, name: score 60 ? name : name, score: score }); } function updateStudent(id, newName, newScore) { const student studentList.find(s s.id id); if (student) { student.name newName; student.score newScore; } } function deleteStudent(id) { studentList studentList.filter(s s.id ! id); } function findStudent(keyword) { return studentList.filter(s s.name.includes(keyword)); }看着朴素但这就是“数据层”的雏形。所有的页面操作都走这四个函数不直接篡改数组。实验报告里如果能把这个设计逻辑讲清楚就已经具备前端分层思想的雏形了。3.2 表单校验的前后端边界感实验16的用户输入基本上都靠表单完成这就要涉及校验了。前端校验的核心目的不是安全而是体验——在用户提交之前就把明显的错误挡回去比如空值、非法格式、超长文本、数字范围异常。真正严谨的安全性校验是在服务端做的前端只是第一道闸门。做实验的时候校验逻辑建议用正则表达式配合约束条件去写。拿学号举例假设规则是10位纯数字function validateStudentId(value) { return /^\d{10}$/.test(value); }分数范围校验就简单判断function validateScore(value) { const num Number(value); return num 0 num 100 Number.isInteger(num); }实验报告建议专门列一个小节说明各种校验规则的边界条件为空时怎么办、输入空格是否算空、分数为0是否合法、极端的100.5是否允许。这些边界条件恰恰是评分时区分认真和敷衍的分水岭。3.3 使用localStorage把数据真正留存下来实验16还有一个进阶加分点数据持久化。默认情况下页面刷新数据全丢体验非常差。如果要做成一个“能给人用”的小系统就得把数据存到localStorage里。localStorage的使用接口非常简单// 保存数据 function saveToLocal() { localStorage.setItem(studentList, JSON.stringify(studentList)); localStorage.setItem(currentId, String(currentId)); } // 加载数据 function loadFromLocal() { const saved localStorage.getItem(studentList); if (saved) { studentList JSON.parse(saved); currentId Number(localStorage.getItem(currentId)) || 1; } }有两个细节必须处理一是localStorage只能存字符串对象要走JSON.stringify序列化读取时再JSON.parse反序列化二是存储时要把currentId也存上否则数据恢复后新加一条记录会把原有记录的主键覆盖掉这是一个很隐蔽的bug很多人第一次做时都会踩中。给实验16做加分展示时可以把“页面刷新后数据依然存在”作为一个小卖点录制一段操作视频或者在报告中放前后对比截图效果很好。3.4 从原生实现迈向工程化思维实验16做完以后建议花点时间做一次“复盘”。不是看代码跑不跑得通而是看代码结构是否有层次。一个合格的前端页面理想状态是“三大块分离”HTML管结构CSS管外观JavaScript管行为和数据。如果JavaScript里全是document.getElementById满天飞一两百行还能撑住超过三百行就非常痛苦——改一个功能要全局搜索。这里提供一个简单但有效的分文件组织方式experiment16/ ├── index.html ├── css/ │ └── style.css ├── js/ │ ├── data.js // 数据定义与增删改查函数 │ ├── render.js // 渲染逻辑负责把数据画到页面上 │ └── main.js // 事件绑定与初始化入口在index.html里分别引入这三个JS文件注意main.js一定要放在最后加载因为前面的代码先执行DOM元素也已经在文档流中出现过了。这样拆的好处是改数据逻辑时你不需要碰渲染代码改样式时你不用在HTML里找内联样式每个文件的职责边界清晰。实验报告里展示这种组织方式观感会比你贴一大坨几百行代码好得多。4. 实验过程中必踩的坑与排查技巧4.1 DOM没找到为什么getElementById返回了null做实验14时最常见的问题脚本明明写在head标签里一运行就报“Cannot read property addEventListener of null”。原因很直白代码执行的时候浏览器还没解析到body里的那些元素document.querySelector自然找不到东西。解决办法有三个。最暴力的是把script标签挪到body元素的末尾这个方法在课程实验阶段最实用也最好解释。第二个办法是监听DOMContentLoaded事件document.addEventListener(DOMContentLoaded, function () { // 在这里写DOM操作代码 });第三个办法是使用window.onload但onload要等到图片、样式等所有资源都加载完才触发比DOMContentLoaded慢页面简单时体会不到差异但原理上不严谨。实验报告里如果写到这层区别能看出你是真的去了解过浏览器渲染机制。4.2 innerHTML拼接的安全隐患与XSS启蒙用innerHTML拼接字符串往页面里插入内容实在是实验里最顺手的写法。但要小心用户输入的内容里如果包含script标签或者img onerror这类恶意内容会被浏览器当成HTML解析并执行造成XSS注入。课程作业大多没有安全测试但得分点只写在“功能实现”上实际工程里这是不可接受的。实验里安全的做法是使用textContent或createTextNode来插入纯文本。还是拿待办事项举例把之前的li.innerHTML ${text} ...改成const span document.createElement(span); span.textContent text; const delBtn document.createElement(button); delBtn.textContent 删除; delBtn.className delBtn; li.appendChild(span); li.appendChild(delBtn);虽然代码多了几行但这样即使用户输入b加粗/b页面也会原样显示而不是真的加粗。实验报告里用一小段说明“这里采用textContent而非innerHTML是为了避免XSS注入风险”含金量立刻不一样。4.3 事件绑定丢失与动态元素的绑定问题动态创建的元素如果直接addEventListener很容易踩到“绑定丢失”的坑。比如页面加载完成后通过JS新增的一个按钮如果你在初始化时给该按钮绑了事件新按钮并不会有事件。原因如前所述事件绑定针对的是那个时间点已经存在的元素而不是未来出现的元素。解决方案就是前面提到的事件委托。想验证是否学会委托可以做一个这样的练习页面上有一串按钮点击任意按钮后把这个按钮移到另一个容器腾挪若干次之后所有按钮的点击反馈依然正常。如果每次都用事件委托这个练习可以稳定通过。4.4 数据渲染重复与缓存的隐性BUG实验16里经常出现“添加了一条记录页面上却出现了两条”的诡异问题。说白了基本都是渲染函数重复调用导致的。比较隐蔽的一种场景在添加记录的事件处理函数里既手动调用了render()又因为触发了某个输入事件导致渲染函数再次被执行。排查方式很简单在render函数开头打一个console.log(render called)看看点击一次按钮后打印了几次。这类问题在实验报告里写出来反而能成为一个好的“分析过程”。用证据说明你定位到了“渲染函数被触发了两次”再说明你通过将渲染函数从事件回调中抽出、合并触发时机解决掉它属于标准的调试叙事。4.5 常见问题速查表问题现象可能原因排查方法控制台报元素为null脚本早于DOM加载将JS放到body末尾或使用DOMContentLoaded页面无交互反应选择器写错或事件绑定失败打印元素变量确认检查选择器拼写新生成的元素点击没反应事件绑定在旧元素上改用事件委托绑定到父节点输入中文时操作频繁触发input事件在组词阶段就会触发用compositionstart/compositionend辅助判断刷新后数据丢失未使用localStorage或保存有异常检查localStorage存储大小与序列化逻辑分数大于100也能提交校验规则不完整测试边界值100、0、负数、小数5. 实验报告的高分写法与演示技巧5.1 报告结构不要按教科书抄实验报告是课程打分的大头但很多人都是随手填一堆截图草草交差。如果想让报告能打动人结构上建议不要按“实验目的-实验步骤-实验结果”这种标准模板而是按“问题背景→设计方案→核心实现→验证过程”来写。问题背景写清楚你做的是什么应用、解决什么实际痛点设计方案里画清数据结构、函数模块的划分和渲染流程核心实现挑三到四个有代表性的功能点给出关键代码并逐行解释验证过程里放页面在边界条件下的表现例如空数据、重复数据、非法数据以及刷新后数据是否保留。这四段下来报告就已经是“有深度”的那一档了。5.2 演示时提前准备好“剧本”如果实验需要现场演示强烈建议提前准备一条演示路径不要边点边想。比如做学生信息管理系统演示的流程可以是加载页面并展示初始状态→添加一名学生并展示校验效果和新增结果→将成绩不合格的学生筛选出来→编辑一条记录→删除一条记录→刷新页面并展示数据仍然存在→展示控制台无报错。每个环节对应的页面状态变化你都心里有数演示就不会乱。有一个容易被忽视的细节是演示时确保打开的是无痕窗口或者清除了旧的localStorage数据否则演示现场会出现上次测试遗留的脏数据看起来非常不专业。可以在演示前先执行一下localStorage.clear()并刷新给评委一个干净的初始状态。5.3 代码注释和变量命名比想象中更重要实验课上顺手写代码的时候不觉得但报告评分时代码可读性直接影响论据的可信度。变量用a、b、temp命名的代码和用studentList、renderList、handleAddClick命名的代码传递出来的专业度天差地别。注释不需要每行都写但对算法关键节点、容易出错的边界条件、模块的职责边界给出简短说明就够了。比如// 使用reduce统计各分数段人数避免多次遍历数组 const scoreStats studentList.reduce((acc, s) { if (s.score 90) acc.excellent; else if (s.score 60) acc.pass; else acc.fail; return acc; }, { excellent: 0, pass: 0, fail: 0 });这段注释就说明“为什么用reduce”比// 定义一个变量有用得多。6. 我的个人实操体会前端学习没有捷径但能少走弯路整个实验14到16做下来我最深的感触是实验安排确实是用心设计过的它把前端学习中三个层次的能力循序渐进地串了一遍。实验14让你能与页面对话实验15让你能理解浏览器运行环境与JavaScript语言本身的思维逻辑实验16再要求你把这些能力整合成一个完整的小应用。每一步走得稳后面的路自然顺。如果你现在正在被这套实验折磨我给你一句实在的建议不要只求“跑通功能”就收手。每次实验做完后给自己追加一个问题比如这个功能如果用另一种事件绑定方式做会怎样、数据量增长到1000条页面会不会卡顿、用户故意输入畸形数据会发生什么。多追问几层你的代码质量和理解深度就会比同龄人往前多走一截。另外做完实验后把代码保留下来不要删。后续如果你想试着学Vue或React把这些实验里的原生实现重写一遍成组件化版本是很好的过渡练习。你会在那个过程中发现现在这些枯燥的DOM操作、事件管理、数据驱动视图的思维恰恰是框架底层帮你解决的问题——理解了底层你用框架时就不再是背API而是真正明白它为什么这么设计。

相关新闻

插件系统设计实战:清单文件、TypeScript SDK与CLI加载流程全解析

插件系统设计实战:清单文件、TypeScript SDK与CLI加载流程全解析

1. 从"plugins"这个标题说起:插件系统到底在解决什么问题"plugins"这个词看起来简单到几乎没什么可写的,但如果你真正动手做过插件系统,就会知道它背后藏着一整套关于扩展性、隔离性、加载时序的工程决策。我接触过不少项…

2026/10/4 3:51:58 阅读更多 →
点云数据增强与预处理:几何保真、任务驱动与硬件感知

点云数据增强与预处理:几何保真、任务驱动与硬件感知

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 3:51:58 阅读更多 →
DeepSeek实操与进阶玩法:从API调用到本地部署的完整指南

DeepSeek实操与进阶玩法:从API调用到本地部署的完整指南

简介:《DeepSeek实操进阶玩法(入门到精通)》是一份面向AI工具初学者的PDF指南,系统梳理了DeepSeek从基础注册到高阶应用的完整学习路径。资源共含1个PDF文档,压缩包约11.53MB,内容覆盖DeepSeek定义与核心功…

2026/10/4 3:51:58 阅读更多 →

最新新闻

吉利9月销量超29万辆创新高:大客户销售如何用价值力赢得市场

吉利9月销量超29万辆创新高:大客户销售如何用价值力赢得市场

技术参数赢得掌声,客户价值赢得订单。大客户销售的第一课,是把我们引以为傲的产品事实,翻译成客户愿意用预算交换的经营事实。 事件回顾:销量新高背后的价值传导 据东方财富报道,吉利汽车集团9月单月销量超29万辆&…

2026/10/4 4:27:17 阅读更多 →
基于MATLAB的瓷砖抛光过程建模与表面形貌三维仿真

基于MATLAB的瓷砖抛光过程建模与表面形貌三维仿真

抛光这个活儿,看着是加工制造里的一个常规工序,但真要把它讲清楚、算明白,其实挺折腾的。我最近用MATLAB做了一套瓷砖抛光过程的建模与仿真,从材料去除机理到三维形貌可视化,前前后后改了很多版,踩了不少坑…

2026/10/4 4:27:17 阅读更多 →
JSP+Servlet实现实验室考勤管理系统:登录签到与数据库设计

JSP+Servlet实现实验室考勤管理系统:登录签到与数据库设计

简介:基于JSP的实验室考勤管理系统是一个面向计算机专业毕业设计和期末大作业的完整项目,适合正在准备课题答辩或需要实战练习的开发者。系统覆盖用户身份验证、考勤记录管理、数据查询与统计报表等功能,采用JSPServletJDBC构建,可…

2026/10/4 4:27:17 阅读更多 →
给Claude桌面端加一条40像素状态栏:监控token、上下文与成本

给Claude桌面端加一条40像素状态栏:监控token、上下文与成本

我日常把 Claude 桌面客户端当主力写作和编码助手用,用得越久越觉得有个地方特别别扭:对话框底部永远干干净净,你发出的每一轮消息消耗了多少上下文、当前到底在跑哪个模型、一次长回答等了多久、这次对话累计烧了多少 token,统统…

2026/10/4 4:27:17 阅读更多 →
Java工程师AI落地:RAG系统与生产级工程实践

Java工程师AI落地:RAG系统与生产级工程实践

1. 为什么Java工程师转身做AI,最该盯住的不是GPU而是业务流水线 “Java工程师转AI”,这六个字最近在技术社区里像被扔进油锅的水滴——滋啦一声就炸开了。但你翻遍招聘JD、刷完十页小红书笔记、听完三场线上分享会,会发现一个奇怪现象&#…

2026/10/4 4:27:17 阅读更多 →
插件机制全解析:从加载失败到根因排查

插件机制全解析:从加载失败到根因排查

不知道你有没有过这种经历:打开某个软件,突然蹦出一行刺眼的红色报错——failed to load plugins,后面还跟着一长串你看不懂的路径和版本号。又或者你在网上搜到某个工具叫"plugins",但翻了半天也没搞明白它到底是干什么…

2026/10/4 4:26:17 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →