Я использую расширение katex для автоматического рендеринга математических формул по мере их ввода. Как я могу заставить это расширение работать с редактируемыми элементами HTML (textarea
, input
)?
Я заметил, что расширение автоматического рендеринга katex прекрасно работает для элементов HTML, содержимое которых нельзя редактировать, таких как элементы div или p. Однако это не работает для редактируемых элементов содержимого, таких как textarea
или input
element
Я пытался использовать div
с атрибутом contenteditable
, установленным в true. Это работает с рядом предостережений, поэтому я бы не стал заниматься этим
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Testing the katex auto-render module</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.10.2/dist/katex.min.css" integrity="sha384-yFRtMMDnQtDRO8rLpMIKrtPCD5jdktao2TV19YiZYWMDkUR5GQZR/NOVTdquEx1j" crossorigin="anonymous">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.10.2/dist/katex.min.js" integrity="sha384-9Nhn55MVVN0/4OFx7EE5kpFBPsEMZxKTCnA+4fqDmg12eCTqGi6+BB2LjY8brQxJ" crossorigin="anonymous"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.10.2/dist/contrib/auto-render.min.js" integrity="sha384-kWPLUVMOks5AQFrykwIup5lo0m3iMkkHrD0uJ4H5cjeGihAutqP0yW0J6dpFiVkI" crossorigin="anonymous"></script>
<script>
document.addEventListener("DOMContentLoaded", function () {
// let contentEditableDiv = document.querySelector("#contentEditableDiv");
document.addEventListener("keyup", (e) => {
renderMathInElement(document.body, {
delimiters: [
{ left: "$$", right: "$$", display: true },
{ left: "\\[", right: "\\]", display: true },
{ left: "$", right: "$", display: false },
{ left: "\\(", right: "\\)", display: false }
]
});
});
});
</script>
</head>
<body>
<textarea id="content">
$\alpha$
$\alpha$
$\alpha$
$\alpha$
</textarea>
<input type="text" name="" id="" value="$\alpha$">
$\alpha$
$\alpha$
$\alpha$
$\alpha$
<p> $\alpha$
$\alpha$
$\alpha$
$\alpha$</p>
<div>
$\alpha$
$\alpha$
$\alpha$
$\alpha$
</div>
<div contenteditable="true" id="contentEditableDiv">try typing some text + math enclosed
math formulas in here</div>
</body>
</html>
Я ожидаю, что $\alpha$
внутри редактируемых элементов HTML (textarea
и input
) будет отображаться после события keyup