当前位置:首页 > React

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

2026-01-26 07:22:26React

获取可编辑 div 内容的方法

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

使用 onInputonBlur 事件

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

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 节点,可以随时获取或修改内容。

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 获取。

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

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

注意事项

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

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

相关文章

vue实现html编辑

vue实现html编辑

Vue 实现 HTML 编辑的方法 使用 v-html 指令 Vue 提供了 v-html 指令,可以将数据作为 HTML 渲染到页面上。需要注意的是,直接使用 v-html 可能存在 XSS 攻击风…

uniapp 内容列表

uniapp 内容列表

uniapp 内容列表的实现方法 在uniapp中实现内容列表通常需要结合组件和数据绑定。以下是一个常见的方法: 模板部分 <template> <view class="c…

vue实现页面在线编辑

vue实现页面在线编辑

Vue实现页面在线编辑的方法 Vue.js可以结合多种库和工具实现页面在线编辑功能,以下是几种常见方案: 使用contenteditable属性 在Vue模板中直接使用HTML5的contented…

vue双击编辑怎么实现

vue双击编辑怎么实现

实现双击编辑功能 在Vue中实现双击编辑功能,可以通过结合v-on指令和条件渲染来完成。以下是一个基本实现方案: <template> <div> <spa…

vue点击实现复制内容

vue点击实现复制内容

使用 document.execCommand 方法 在 Vue 中可以通过 document.execCommand 实现复制功能。创建一个方法,动态创建 textarea 元素并选中内容,执行复制…

vue实现商品规格编辑

vue实现商品规格编辑

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