我正在尝试使用CodeMirror设置代码示例的样式,但它部分工作 - 它将所选主题应用于textarea
,但语法不会突出显示。
有我的页面:
<textarea id="template-html" name="code" class="CodeMirror">
<!DOCTYPE html>
<foobar>
<blah>Enter your xml here and press the button below to display it as highlighted by the CodeMirror XML mode</blah>
<tag2 foo="2" bar="bar" />
</foobar>
</textarea>
<link rel="stylesheet" type="text/css" href="/site.com/css/codemirror/codemirror.css">
<link rel="stylesheet" type="text/css" href="/site.com/css/codemirror/theme/ambiance.css">
<link rel="stylesheet" type="text/css" href="/site.com/css/codemirror/theme/solarized.css">
<script type="text/javascript" src="/site.com/js/libs/codemirror/codemirror.js"></script>
<script type="text/javascript" src="/site.com/js/libs/codemirror/mode/javascript/javascript.js"></script>
<script type="text/javascript">
var config, editor;
config = {
lineNumbers: true,
mode: "text/html",
theme: "ambiance",
indentWithTabs: false,
readOnly: true
};
editor = CodeMirror.fromTextArea(document.getElementById("template-html"), config);
function selectTheme() {
editor.setOption("theme", "solarized dark");
}
setTimeout(selectTheme, 5000);
</script>
这是结果的图像。它似乎工作,但没有语法高亮(图像顶部),我也尝试没有我的CSS,但结果是相同的(图像底部):
问题在于mode: "text/html"
似乎无法正常工作,如果我使用mode: "javascript"
它会根据JavaScript语法规则对标记进行着色。我该如何解决这个问题?
答案 0 :(得分:49)
CodeMirror使用XML模式解析HTML。要使用它,必须包含相应的脚本,与任何其他模式相同。
在您的标记中添加其依赖项:
<script type="text/javascript"
src="/site.com/js/libs/codemirror/mode/xml/xml.js"></script>
并将模式设置为xml
:
config = {
mode : "xml",
// ...
};
此外,您可能希望将解析器配置为允许格式不正确的XML。您可以通过切换htmlMode
标志来执行此操作:
config = {
mode : "xml",
htmlMode: true,
// ...
};
有关实例,请参阅XML/HTML mode demo。
答案 1 :(得分:0)
以防万一我的经验对某人有帮助。
我确实遵循了错误:
<script src="lib/codemirror.js"></script>
<script type="text/javascript">
const editor = CodeMirror.fromTextArea(document.getElementById('textarea'), {
mode: "css",
lineNumbers: true,
foldGutter: true,
gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter", "CodeMirror-lint-markers"],
lint: true
});
</script>
<script src="addons/lint/lint.js"></script>
<script src="addons/lint/css-lint.js"></script>
<script src="addons/fold/brace-fold.js"></script>
<script src="addons/fold/foldcode.js"></script>
<script src="addons/fold/foldgutter.js"></script>
<script src="addons/fold/indent-fold.js"></script>
<script src="addons/fold/markdown-fold.js"></script>
<script src="mode/css.js"></script>
<script src="//unpkg.com/csslint@1.0.5/dist/csslint.js"></script>
这是错误的::我先调用了codemirror.js-主文件,然后初始化了Editor,后来又调用了它的资产。在这种情况下,它不起作用,我花了一些时间才发现问题(我是在WordPress中完成的,所以我只是使脚本仅依赖于codemirror.js)。