【发布时间】:2011-01-01 00:13:15
【问题描述】:
我有一个<textarea />,如下面的代码所示。如何在其左侧显示行号?
有 jQuery 插件吗?
<TEXTAREA name="program" id="program" rows="15" cols="65" ></TEXTAREA>
【问题讨论】:
-
代码是否需要显示在文本区域(即可编辑)中,还是可以格式化为另一个块中的代码?
我有一个<textarea />,如下面的代码所示。如何在其左侧显示行号?
有 jQuery 插件吗?
<TEXTAREA name="program" id="program" rows="15" cols="65" ></TEXTAREA>
【问题讨论】:
有Lined TextArea (链接不再有效,请参阅mirror) Alan Williamson 的 jQuery 插件
麻省理工学院许可证
jQuery 1.3+
【讨论】:
你可以试试 Code Mirror,这是一个用于在网页中嵌入代码编辑器的 JavaScript 库。
通过代码行,它具有强大的功能,例如
【讨论】:
这是一个非常简单但有效的技巧。它插入已添加行号的图像。
唯一的问题是您可能需要创建自己的图像以匹配您的 UI 设计。
https://jsfiddle.net/vaakash/5TF5h/
textarea {
background: url(http://i.imgur.com/2cOaJ.png);
background-attachment: local;
background-repeat: no-repeat;
padding-left: 35px;
padding-top: 10px;
border-color:#ccc;
}
【讨论】:
1500
没有人尝试使用 HTML5 Canvas 对象并在其上绘制行号来做到这一点。 所以这就是我在几个小时内设法汇集的东西。 将 canvas 和 textarea 并排放置,并在 canvas 上绘制数字。
https://www.w3schools.com/code/tryit.asp?filename=G68VMFWS12UH
确实存在限制,我们无法在 Paint() 函数中轻松处理自动换行,除非迭代整个 textarea 内容并绘制到镜像对象以测量每个行高。也会产生非常复杂的代码。
【讨论】:
这里有人推荐了CodeMirror,我怎么推荐都不够!但这个答案并没有真正提供任何技术细节。
其他解决方案:我在这里尝试的所有其他方法都存在行号与行不匹配的问题。我相信这是因为我将 DPI(每英寸点数)监控为 120%,而这些解决方案没有考虑到这一点。
那么,你如何使用 CodeMirror??? 简单! Just look at the 21,000 words of the documentation! 我希望不到一两页就能解释你 99% 的问题。
100% 工作演示,它在 StackOverflow 沙箱中完美运行:
var editor = CodeMirror.fromTextArea(document.getElementById('code'), {
lineNumbers: true,
mode: 'text/x-perl',
theme: 'abbott',
});
<script language="javascript" type="text/javascript" src="https://codemirror.net/lib/codemirror.js"></script>
<script language="javascript" type="text/javascript" src="https://codemirror.net/mode/perl/perl.js"></script>
<link rel="stylesheet" type="text/css" href="https://codemirror.net/lib/codemirror.css"></link>
<link rel="stylesheet" type="text/css" href="https://codemirror.net/theme/abbott.css"></link>
<textarea id="code" name="code">
if($cool_variable) {
doTheCoolThing(); # it's PRETTY cool, imho
}</textarea>
将此添加到您的 <head> 块...
<script language="javascript" type="text/javascript" src="/static/js/codemirror-5.62.0/lib/codemirror.js"></script>
<link rel="stylesheet" type="text/css" href="/static/js/codemirror-5.62.0/lib/codemirror.css"></link>
而且,如果你喜欢额外的括号颜色匹配,也加载这个:
<script language="javascript" type="text/javascript" src="/codemirror-5.62.0/addon/edit/matchbrackets.js"></script>
查看/codemirror-5.62.0/mode/ 目录,看看哪种语言与您将要编码的语言相匹配。该区域提供广泛的支持。
将此添加到您的 <head> 块...
<script language="javascript" type="text/javascript" src="/static/js/codemirror-5.62.0/mode/perl/perl.js"></script>
有一些 textarea 可以使用....
<textarea id="code" name="code"></textarea>
在 JS 中初始化并设置您的代码镜像。您需要使用 Mimetype 来表示您要使用的模式,在这种情况下,我表示的是 Perl Mimetype...
var editor = CodeMirror.fromTextArea(document.getElementById('code'), {
lineNumbers: true,
mode: 'text/x-perl',
matchBrackets: true,
});
选择一些你喜欢的主题,'liquibyte'、'cobalt' 和 'abbott' 都是相当不错的暗模式主题。在定义editor之后运行这个...
editor.setOption('theme', 'cobalt');
就是这样!
【讨论】:
CodePress 是 WordPress 中使用的。
【讨论】:
function generateWithNumber() {
let inputTexts = document.getElementById("input").value
let textsByLine = inputTexts.split("\n");
const listMarkup = makeUL(textsByLine);
document.getElementById("output").appendChild(listMarkup);
}
function makeUL(array) {
let list = document.createElement('ol');
for (let i = 0; i < array.length; i++) {
let item = document.createElement('li');
item.appendChild(document.createTextNode(array[i]));
list.appendChild(item);
}
return list;
}
// document.getElementById('foo').appendChild(makeUL(options[0]));
ol {
counter-reset: list;
}
ol > li {
list-style: none;
}
ol > li:before {
content: counter(list) ") ";
counter-increment: list;
}
<textarea id="input"></textarea>
<button onClick=generateWithNumber() >Generate</button>
<p id="output"></p>
【讨论】: