当前位置:首页 > JavaScript

js实现编辑器

2026-01-31 05:02:03JavaScript

实现基础文本编辑器

使用HTML的contenteditable属性创建可编辑区域,结合JavaScript监听输入事件:

<div id="editor" contenteditable="true"></div>
<script>
  const editor = document.getElementById('editor');
  editor.addEventListener('input', () => {
    console.log(editor.innerHTML); // 获取带格式的内容
  });
</script>

集成富文本功能

通过document.execCommand实现粗体、斜体等基础格式操作:

function formatText(command, value = null) {
  document.execCommand(command, false, value);
}
// 调用示例:formatText('bold')  formatText('insertImage', 'url')

使用现成库方案

引入开源库如TinyMCE或Quill快速实现专业编辑器:

js实现编辑器

<!-- TinyMCE示例 -->
<script src="https://cdn.tiny.cloud/1/your-api-key/tinymce/5/tinymce.min.js"></script>
<script>
  tinymce.init({ selector: '#editor' });
</script>

<!-- Quill示例 -->
<link href="https://cdn.quilljs.com/1.3.6/quill.snow.css" rel="stylesheet">
<script src="https://cdn.quilljs.com/1.3.6/quill.js"></script>
<div id="editor"></div>
<script>
  new Quill('#editor', { theme: 'snow' });
</script>

实现Markdown编辑器

结合marked.js库解析Markdown语法:

<textarea id="input"></textarea>
<div id="preview"></div>
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<script>
  document.getElementById('input').addEventListener('input', (e) => {
    document.getElementById('preview').innerHTML = marked(e.target.value);
  });
</script>

自定义语法高亮

使用Prism.js实现代码高亮功能:

js实现编辑器

<pre><code class="language-javascript" contenteditable="true">
  function test() { console.log('hello'); }
</code></pre>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.24.1/prism.min.js"></script>

实现撤销/重做功能

通过维护状态数组记录编辑历史:

let history = [];
let currentIndex = -1;

editor.addEventListener('input', () => {
  const content = editor.innerHTML;
  history = history.slice(0, currentIndex + 1);
  history.push(content);
  currentIndex = history.length - 1;
});

function undo() {
  if (currentIndex > 0) {
    currentIndex--;
    editor.innerHTML = history[currentIndex];
  }
}

添加工具栏UI

创建格式控制按钮并与编辑器交互:

<div class="toolbar">
  <button onclick="formatText('bold')">B</button>
  <button onclick="formatText('italic')">I</button>
  <input type="color" onchange="formatText('foreColor', this.value)">
</div>
<style>
  .toolbar { padding: 5px; background: #f0f0f0; }
  .toolbar button { margin-right: 5px; }
</style>

实现自动保存

使用防抖技术定期保存内容:

let saveTimer;
editor.addEventListener('input', () => {
  clearTimeout(saveTimer);
  saveTimer = setTimeout(() => {
    localStorage.setItem('editorContent', editor.innerHTML);
  }, 1000);
});

// 加载保存的内容
window.addEventListener('DOMContentLoaded', () => {
  const saved = localStorage.getItem('editorContent');
  if (saved) editor.innerHTML = saved;
});

标签: 编辑器js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…