Javascript 在文本区域内显示MathML符号

Javascript 在文本区域内显示MathML符号,javascript,textarea,symbols,mathml,Javascript,Textarea,Symbols,Mathml,我正在构建一个HTML文件中的数学文本编辑器。我的目标是允许用户在文本区域中显示数字和MathML符号,但完全不需要使用物理键盘。在页面底部,我有一个模拟键盘,由带有数字和算术符号的按钮组成。当用户单击这些按钮时,相应的数字或符号将出现在文本区域内。到目前为止,我可以将其用于数字,但不能用于MathML符号。有没有办法让这些符号显示在文本区域内 为了便于理解,以下是一个由其中一个按钮调用的函数,用于将数字1插入文本区域: function insertOne(mctextarea,oneText

我正在构建一个HTML文件中的数学文本编辑器。我的目标是允许用户在文本区域中显示数字和MathML符号,但完全不需要使用物理键盘。在页面底部,我有一个模拟键盘,由带有数字和算术符号的按钮组成。当用户单击这些按钮时,相应的数字或符号将出现在文本区域内。到目前为止,我可以将其用于数字,但不能用于MathML符号。有没有办法让这些符号显示在文本区域内

为了便于理解,以下是一个由其中一个按钮调用的函数,用于将数字1插入文本区域:

function insertOne(mctextarea,oneText='1'){
    document.getElementById('mctextarea').value += oneText;
}
function insertSqrt(mctextarea,sqrt=<math xmlns="http://www.w3.org/1998/Math/MathML" display="inline"><mrow><msqrt>x</msqrt></mrow></math>){
    document.getElementById('mctextarea').value += sqrt;
}
下面是我尝试编写的一个函数,用于在文本区域中插入一个平方根符号:

function insertOne(mctextarea,oneText='1'){
    document.getElementById('mctextarea').value += oneText;
}
function insertSqrt(mctextarea,sqrt=<math xmlns="http://www.w3.org/1998/Math/MathML" display="inline"><mrow><msqrt>x</msqrt></mrow></math>){
    document.getElementById('mctextarea').value += sqrt;
}
函数insertSqrt(mctextarea,sqrt=x){
document.getElementById('mctextarea')。value+=sqrt;
}
…这显然不起作用,但我不知道从哪里开始尝试在文本区域显示MathML


请注意,我现在只使用Javascript大约3周了,所以我仍在学习诀窍。:)

文本区域内的html/xml标记是不可以的,请看——它为您可以使用的其他方法提供了一些好主意

另外,javascript不允许像上面那样的默认参数,请参阅。您还需要将xml字符串放在单引号内

您可能需要做的是让按钮将MathJax标记插入文本区域。然后,您将有另一个函数获取此文本,并将其呈现在单独的div中


因此,您有可编辑的textarea和一个显示结果的预览div,与Stack Overflow上的textareas非常相似。

Ben,我对stackoverflow.com非常陌生,因此我无法发布此代码呈现的图片。我正在使用开源MathJax.js以HTML格式呈现数学函数。你可以在网站上找到更好的例子

PS:我仍在学习如何正确格式化答案;)
代码示例:

<!DOCTYPE html>
<html lang="en" >
  <head>
    <title></title>
    <meta charset="UTF-8" />
  </head>
  <body>
    <p>Have you seen MathJax.js at www.mathjax.org</p>
    <p>$$
      \large
      \begin{align&#42;}
      &amp; J(\theta) = \dfrac{1}{m} \sum&#95;{i=1}^m Cost((h&#95;
      \theta(x^{(i)}),y^{(i)}) \newline
      &amp; Cost((h&#95;\theta(x),y) = -log(h&#95;\theta(x)) \; &amp; \text{if y = 1}\newline
      &amp; Cost((h&#95;\theta(x),y) = -log(1-h&#95;\theta(x)) \; &amp; \text{if y = 0}\end{align&#42;}
      $$
    </p>

    <script type='text/javascript' src='http://cdn.mathjax.org/mathjax/late/MathJax.js?config=TeX-AMS-MML_HTMLorMML'></script>
  </body>
</html>

你在www.MathJax.org上看过MathJax.js吗

$$ \大的 \开始{align*;} &;J(\theta)=\dfrac{1}{m}\sum_;{i=1}^m成本((h_; \θ(x^{(i)}),y^{(i)})\newline &;Cost((h_;\theta(x),y)=-log(h_;\theta(x))\&;\text{if y=1}\newline &;Cost((h_;\theta(x),y)=-log(1-h_;\theta(x))\&;\text{if y=0}\end{align*;} $$


你的
脚本中的URL
恐怕是
404
。你能帮我们再检查一下吗?啊,找到了正确的URL:Note from the future:cdn.mathjax.org快结束了,检查一下迁移技巧(也许还可以为未来的读者更新你的帖子).好的,谢谢你的反馈。我已经将文本区域改回了一个div(这是我以前使用的),并将contenteditable=“true”我之所以把它作为文本区,是因为我可以创建一个退格按钮,但我还没有弄明白。有没有一种方法可以为可编辑的div做这样的事情?嗯……你可以保留一个堆栈(先进先出数组)您放入div中的内容,用于呈现内容。每当有人点击退格按钮时,您会从堆栈中弹出最新的项并重新呈现。