【发布时间】:2020-11-18 12:35:41
【问题描述】:
现在我正在使用带有 codemirror 的 showdown.js 制作编辑器
我想突出显示摊牌库语法(如#Heading、**Bold**、``` Code ``)
这是我的代码
let codemirror = CodeMirror.fromTextArea(
document.getElementById("book-content"),
{
lineNumbers: true,
lineWrapping: true,
mode: "mustache",
htmlMode: true,
styleActiveLine: true,
autoCloseTags: true,
theme: "monokai",
keyMap: "sublime",
showCursorWhenSelecting: true,
}
);
<link rel="stylesheet" href="https://codemirror.net/lib/codemirror.css" />
<link rel="stylesheet" href="https://codemirror.net/theme/monokai.css" />
<textarea rows="15" id="book-content" placeholder="Enter Your README.md ...">
#Heading 1
##Heading 2
<h1>Code Here</h1>
[Hyper Link](http://google.com/)
*Italic*
**Bold**
- foo1
- bar
- baz
- foo2
</textarea>
<script src="https://codemirror.net/lib/codemirror.js"></script>
<script src="https://codemirror.net/keymap/sublime.js"></script>
<script src="https://codemirror.net/addon/selection/active-line.js"></script>
<script src="https://codemirror.net/addon/display/placeholder.js"></script>
我用下面的代码试试这个
<style>
.highlightred {
color: var(--red);
}
.highlightorange {
color: var(--orange);
}
.highlightgreen {
color: var(--green);
}
.highlightblue {
color: var(--blue);
}
</style>
<script>
const hightlightArray = [
["#", "highlightgreen"],
["+", "highlightorange"],
["-", "highlightorange"],
["*", "highlightorange"],
[")", "highlightblue"],
["(", "highlightblue"],
["[", "highlightblue"],
["]", "highlightblue"],
["{", "highlightblue"],
["}", "highlightblue"],
["`", "highlightred"],
];
function highlightCodeMirror() {
document.querySelectorAll(".CodeMirror-line span").forEach((element) => {
let Value = element.textContent;
HightLighted = Value;
for (let i = 0; i < htmlEntities.length; i++) {
const ThisElement1 = htmlEntities[i];
HightLighted = HightLighted.replaceAll(
ThisElement1[0],
ThisElement1[1]
);
}
for (let i = 0; i < hightlightArray.length; i++) {
const ThisElement2 = hightlightArray[i];
HightLighted = HightLighted.replaceAll(
ThisElement2[0],
`<span class='${ThisElement2[1]}'>${ThisElement2[0]}</span>`
);
}
element.innerHTML = HightLighted;
});
}
setInterval(() => {
highlightCodeMirror();
}, 500);
</script>
此代码有效。但是 codemirror 的行为变得很糟糕。 active-line.js 不起作用,并且闪烁的光标未显示在 textarea 中。
请任何人帮助我解决这个问题
感谢提前
【问题讨论】:
标签: javascript markdown editor codemirror