gpt4 book ai didi

javascript - 如何根据用户选择创建跨度(js)

转载 作者:行者123 更新时间:2023-12-03 03:55:46 24 4
gpt4 key购买 nike

我想做一个文本编辑器。它应该以所有文本编辑器的工作方式(包括我现在正在使用的这个)工作,因此用户选择文本,按下按钮或其他什么,然后执行某些功能。我希望我的编辑器按以下方式工作:1. 用户选择2. 触发函数 selected(),在所选文本周围形成一个跨度。3. 当用户单击“B”或“I”等按钮时,他们会调用更改 span 元素的 .style 的函数。现在我弄清楚了如何从用户选择中获取字符串,仅此而已。

    <body>
<textarea onselect="selected()">Some text here, more text here.</textarea>
</body>
<script>
function selected() {
var preselection = window.getSelection();
selection = preselection.toString();
console.log(selection);
}
</script>

最佳答案

文本区域不能包含跨度,因此如果您决定使用跨度,则需要使用类似的内容:

<p contenteditable="true" ...

您可能不想在每次用户做出选择时都触发您的函数。相反,只需在用户按下按钮(如粗体按钮)时运行该函数,然后使用以下命令选取选定的文本(如果有):

document.getSelection().toString()

现在向 HTML 元素添加 对象非常容易,但这里最大的挑战是您不知道您的选择是否会交叉其他 span 对象(例如用户是否已经添加了一些格式)。请注意,stackoverflow 在编辑区域中插入 ** 等字符,然后执行 one pass 来添加 等标签。这也可以在文本区域中实现,因此您不需要 contenteditable="true"。

可以分析您选择的内容,然后收集所有涉及的元素,并根据需要重写它们。您必须获取参与选择的所有父对象,然后在每个父对象内的文本周围添加 元素。

为了简化这一点,您可以制定一条规则,在可编辑区域中只允许使用一级标签,然后始终为此重写,以便结果只有一级跨度:

<span class="bold">This whole sentence is italic and </span><span class="italic_bold">this half is also bold.</span> with no nesting of these span tags.

研究这些属性可能有助于处理嵌套:https://developer.mozilla.org/en-US/docs/Web/API/Selection

这些字符串命令也可能有帮助: https://www.w3schools.com/jsref/jsref_obj_string.asp

关于javascript - 如何根据用户选择创建跨度(js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44957218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com