【发布时间】:2022-04-22 07:49:28
【问题描述】:
我想通过 Javascript 使用 DOM 操作来更改 slate 编辑器中的文本。
动态更改填充到特定网页中可编辑组件中的值。 该网站结合了简单的输入元素和石板编辑器。一旦焦点离开它们,输入到这些字段中的值就会被保存。
我已经设法更改了普通输入元素的文本并模糊了保存的数据。 我不确定如何在 slate 编辑器元素上实现相同的行为。
我曾尝试使用 dispatchEvent 在 slate 编辑器组件上调度事件,但没有成功。
<div
data-slate-editor="true"
data-key="18"
contenteditable="true"
class="
uta_c_editor__slate-editor uta_c_editor__slate-editor--dictation-disabled
"
autocorrect="on"
spellcheck="false"
role="textbox"
data-gramm="false"
style="
outline: none;
white-space: pre-wrap;
overflow-wrap: break-word;
-webkit-user-modify: read-write-plaintext-only;
"
>
<div data-slate-object="block" data-key="19" style="position: relative">
<span data-slate-object="text" data-key="20"
><span data-slate-leaf="true" data-offset-key="20:0"
><span data-slate-string="true">Testing in progress.</span></span
></span
>
</div>
</div>
尝试在此元素上调度以下事件。
let changeEvent = new Event('change', {
'bubbles': true,
'detail': {
value: "Testing Slate Js"
} });
targetSlateElement.dispatchEvent(changeEvent)
尝试更新其 textContent 如下:
targetSlateElement.textContent = "Testing Slate JS"
上述方法确实改变了它的内容值,但是在模糊它时它会将内容重置为旧内容。
【问题讨论】:
-
请添加您尝试过的示例代码或指向codepen/codesandbox的链接。
-
@VijayDev 我在 slate js 编辑器的目标元素上调度了以下事件。 let changeEvent = new Event('change', { 'bubbles': true, 'detail': {value: "Testing Slate Js"} });
-
@saichaitanya 在codesandbox.io/s/0qor7onxy0 上的最小重现性会很好。
-
@saichaitanya 只是好奇,你不需要一个由 dispatchEvent("change", ...) 触发的
change事件处理程序吗? -
例如,你可以在MDN doc看到这里
标签: javascript reactjs slate.js