可行且轻量,但需注意DOM更新频率、XSS风险(marked必须开启sanitize或用DOMPurify)、滚动锚点偏移(需比例映射scrollTop)及样式错乱(应引入github-markdown-css或手动重置)。
直接用原生 HTML + JavaScript 实现 Markdown 实时编辑预览,不依赖大型框架(如 React/Vue),核心靠
解析 + 双栏同步滚动,可行且轻量;但要注意 DOM 更新频率、XSS 风险和滚动锚点偏移这三处最容易翻车的地方。
用
解析 Markdown 时必须开启
默认
不过滤 HTML 标签,用户输入
会直接执行。即使你只做内部工具,也建议强制开启安全模式:
如果你用的是
,
已废弃,应改用
+ 自定义
方法拦截,或搭配
二次处理 —— 否则任何含
、
的输入都可能触发 XSS。
和预览区滚动不同步?用
和
做比例映射
纯 CSS 无法让两个容器滚动联动,必须监听
或
事件手动同步。常见错误是直接复制
值,导致预览区滚动过快或卡顿:
立即学习
“
前端免费学习笔记(深入)
”;
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
编辑区高度变化频繁(比如输入换行、粘贴大段文本),
会抖动,需节流处理
预览区内容渲染有延迟,应在
回调后才更新
比例计算要用
,再乘以预览区可滚动高度
示例关键逻辑:
为什么预览区样式错乱?别漏掉
输出的
和
默认样式
输出的是纯语义 HTML(如无 class 的
、
),浏览器默认样式和你的页面主题冲突很常见:
没加语法高亮 → 推荐用
的
在渲染后调用
markedmarkedsanitize: truemarkedmarked.setOptions({
sanitize: true,
// ⚠️ 注意:v4+ 版本改用 sanitizer 选项,但最简方案仍是 sanitize: true
});marked@^4.0.0sanitizerendererhtmlDOMPurifytextareascrollHeightscrollTopscrollinputscrollTopscrollHeightmarked.parse()scrollTop(textarea.scrollTop / (textarea.scrollHeight - textarea.clientHeight))textarea.addEventListener('scroll', () => {
const ratio = textarea.scrollTop / (textarea.scrollHeight - textarea.clientHeight);
preview.scrollTop = ratio * (preview.scrollHeight - preview.clientHeight);
});markedmarked
highlight.jshighlightElement()
无边框/错位 → 需手动重置
border-collapse: collapse
和
td, th
padding
链接没下划线或颜色太浅 → 至少加一条
preview a { color: #007bff; text-decoration: underline; }
最省事的做法:给预览容器加
class="markdown-body"
,然后引入 GitHub 官方的
github-markdown-css
(注意只用它对 block 元素的 reset 规则,别全量加载)。
滚动同步的精度、HTML 渲染的安全边界、样式隔离的粒度——这三点在小项目里容易被当成“先跑起来再说”的环节,但一旦用户开始粘贴代码块或嵌入表格,问题就会集中爆发。
相关文章
