当前位置:首页 > React

react如何获取可编辑div的内容

2026-01-26 07:22:26React

获取可编辑 div 内容的方法

在 React 中获取可编辑 div(通过 contentEditable 属性实现)的内容,可以通过以下几种方式实现:

使用 onInputonBlur 事件

通过监听 onInputonBlur 事件,可以直接从事件对象或 DOM 节点中获取内容。

react如何获取可编辑div的内容

import React, { useState } from 'react';

function EditableDiv() {
  const [content, setContent] = useState('');

  const handleInput = (e) => {
    setContent(e.currentTarget.innerHTML);
  };

  return (
    <div
      contentEditable
      onInput={handleInput}
      dangerouslySetInnerHTML={{ __html: content }}
    />
  );
}

使用 ref 直接访问 DOM

通过 useRef 钩子直接访问 DOM 节点,可以随时获取或修改内容。

react如何获取可编辑div的内容

import React, { useRef } from 'react';

function EditableDiv() {
  const editableRef = useRef(null);

  const getContent = () => {
    console.log(editableRef.current.innerHTML);
  };

  return (
    <div>
      <div
        contentEditable
        ref={editableRef}
        dangerouslySetInnerHTML={{ __html: '初始内容' }}
      />
      <button onClick={getContent}>获取内容</button>
    </div>
  );
}

结合 useStateuseEffect

如果需要同步内容到状态,可以结合 useStateuseEffect 实现。

import React, { useState, useEffect, useRef } from 'react';

function EditableDiv() {
  const [content, setContent] = useState('初始内容');
  const editableRef = useRef(null);

  useEffect(() => {
    if (editableRef.current) {
      editableRef.current.innerHTML = content;
    }
  }, [content]);

  const handleInput = () => {
    setContent(editableRef.current.innerHTML);
  };

  return (
    <div
      contentEditable
      ref={editableRef}
      onInput={handleInput}
    />
  );
}

处理纯文本内容

如果只需要纯文本内容,可以通过 innerTexttextContent 获取。

const handleInput = (e) => {
  console.log(e.currentTarget.innerText);
};

注意事项

  • 使用 contentEditable 时,直接操作 DOM 可能会导致 React 的状态与实际 DOM 不同步,建议通过事件或 ref 显式更新状态。
  • dangerouslySetInnerHTML 用于设置初始内容,但需注意 XSS 安全风险。
  • 对于复杂需求(如富文本编辑器),建议使用现成的库(如 draft-jsslate)。

标签: 编辑内容
分享给朋友:

相关文章

vue实现图片编辑插件

vue实现图片编辑插件

Vue 图片编辑插件实现方案 使用现成库 vue-cropperjs 安装依赖库: npm install vue-cropperjs cropperjs 基础组件实现: <template…

vue实现画布编辑

vue实现画布编辑

Vue 实现画布编辑 使用 HTML5 Canvas 和 Vue 结合 在 Vue 中可以通过封装 HTML5 Canvas 实现画布编辑功能。创建一个 Vue 组件,在 mounted 钩子中初始化…

vue实现复制指定内容

vue实现复制指定内容

实现复制功能的几种方法 使用Clipboard API 现代浏览器支持Clipboard API,可以直接操作剪贴板内容。在Vue中可以通过以下方式实现: methods: { async c…

vue实现商品规格编辑

vue实现商品规格编辑

实现商品规格编辑功能 在Vue中实现商品规格编辑功能通常涉及动态表单生成、数据绑定和交互逻辑处理。以下是一个典型的实现方案: 数据结构设计 商品规格数据通常采用嵌套结构,例如: data() {…

vue实现添加内容代码

vue实现添加内容代码

以下是一个基于 Vue.js 实现添加内容的代码示例,包含核心逻辑和关键步骤: 基础实现 模板部分(Template) <template> <div>…

vue实现的表格编辑

vue实现的表格编辑

Vue 表格编辑实现方法 使用 v-model 绑定数据 在 Vue 中实现表格编辑功能,可以通过 v-model 双向绑定数据。为每个可编辑单元格添加 input 元素,并使用 v-model 绑定…