iFrame 和 Textarea Editor Live Preview 以及 activeElement 的“Des

iFrame and Textarea Editor Live Preview and "Designer Mode" with activeElement

本文关键字:activeElement Des 以及 Preview Textarea Editor Live iFrame      更新时间:2023-09-26

我正在制作一个具有实时预览功能的编辑器,这意味着当我在textarea内键入HTML代码时,它将自动显示在iFrame中,我目前有以下代码来选择iFrame中的活动元素: document.getElementById("IFRAME").contentWindow.document.activeElement但是我该怎么做呢,以便当我单击iFrame内的元素时, 它将选择我在textarea中编写的元素源?一个概念也会很好。

我最初的概念是:

当我单击iframe内的element时,它将获得activeElementinnerHTML并在textarea中搜索它,但问题是如果用户有多个相同的elements具有相同的innerHTML怎么办?所以这是行不通的。

粗略代码(仅用于概念(:

.HTML:

<iframe id="IFRAME"></iframe>
<textarea id="TEXTAREA" onkeyup="update()">
    <div id="clickme">
    </div>
</textarea>

JAVASCRIPT:

function update() {
document.getElementById('IFRAME') = document.getElementById('TEXTAREA').innerHTML;
}
function IFRAME_ELEMENT_CLICKED() {
    // When "clickme" is clicked from inside the iframe, select the innerHTML generated in the TEXTAREA
    // document.getElementById("IFRAME").contentWindow.document.activeElement ....
}

在我看来,当您从文本区域生成对 iFrame 的预览时,您应该通过包含一个说明符来创建 dom 元素,该说明符充当文本区域中的内容与 iFrame 内容之间的链接。您可能可以开始为您在 iFrame 上生成的每个标签分配一个 id,该标签可以是文本区域中的光标位置/字符索引等(这需要我在这里提到的更多操作,因为您需要在 iFrame 中重新分配 ID,因为并非总是每个人都在文本区域的末尾键入文本(。

这样,当有人在iFrame上进行选择时,您将能够捕获文本区域中内容的确切位置。