我正在寻找将 rtl 和 ltr 语言放在一个文本区域中的最优雅的解决方案:例如,将阿拉伯语和 html 放在一起。
标准说不要使用 css 创建它:
direction: rtl;
unicode-bidi: embed;
无论如何,这对我不起作用,因为 html 存在嵌套文本问题。阿拉伯语向右对齐,但 html 已损坏。
有没有办法动态地做到这一点?该标准想要添加一个嵌套的跨度标签,但由于用户正在动态输入它,我不知道如果不检测每个字符的结尾,这是怎么可能的。
我正在寻找将 rtl 和 ltr 语言放在一个文本区域中的最优雅的解决方案:例如,将阿拉伯语和 html 放在一起。
标准说不要使用 css 创建它:
direction: rtl;
unicode-bidi: embed;
无论如何,这对我不起作用,因为 html 存在嵌套文本问题。阿拉伯语向右对齐,但 html 已损坏。
有没有办法动态地做到这一点?该标准想要添加一个嵌套的跨度标签,但由于用户正在动态输入它,我不知道如果不检测每个字符的结尾,这是怎么可能的。
由于 a 的内容textarea
被视为纯文本,因此您不能在其中使用任何span
标记或任何其他标记,并且您不能将其任何部分的样式设置为与其余部分不同(第一行或第一个字符除外,使用伪元素)。
但是,在纯文本级别,可以使用控制字符强制执行双向嵌入。假设你direction: rtl
对整个元素进行设置(期望用户以从右到左的语言输入数据),用户可以输入 U+202A LEFT-TO-RIGHT EMBEDDING 来输入从左到右的文本,例如英语或 HTML标记,然后通过键入 U+202C POP DIRECTIONAL FORMATTING 结束此操作,返回从右到左模式。
由于大多数人不知道如何方便地输入这些字符,如果有的话,您可以在页面上为它们设置按钮:
<textarea id=msg name=msg rows=10 cols=40>
</textarea>
<br>
<button type=button onclick="append('\u202A')">→</button>
<button type=button onclick="append('\u202C')">←</button>
<script>
var msg = document.getElementById('msg');
function append(ch) {
msg.innerHTML += ch;
msg.focus();
}
</script>