【发布时间】:2014-06-19 14:47:55
【问题描述】:
我正在开发一个简单的文本屏幕/终端模拟器(类似于 JQuery 终端插件,但没有 RPC 的东西并具有窗口功能)。 屏幕的每一行都是一个表格行(一个 HTML 字符串),打印命令可以插入带有某些属性(例如前景色和背景色)的文本。每个打印的文本 由带有样式属性的 span 包围,例如:
<span style="color:#000000;background-color:#111111">A</span><span style="color:#222222;background-color:#333333>BC</span>
这很好用。现在我想添加一个函数,它可以在给定的屏幕位置为我提供一个角色的所有属性, 在上一行中,位置 0 (A) 处的字符的颜色为 #000000。 所以我必须计算不属于 span 标签的字符并获取最后一个前面的样式。我的第一个相当容易出错的解决方案是:
function getAttr(line, position) {
var result = {foreground:'', background:''},
ch = '', i, j = -1, tag = false;
// Count characters
for (i = 0; i < line.length && j < position; i++) {
ch = line.charAt(i);
if (ch == '<') {
tag = true;
}
if (ch == '>') {
tag = false;
}
else if (!tag) {
j++;
}
}
i--;
// Find styles
while (i > 0 && line.charAt(i) != '<') {
if (line.substr(i, 6) == 'color:') {
result.foreground = line.substr(i + 6, 7);
}
if (line.substr(i, 17) == 'background-color:') {
result.background = line.substr(i + 17, 7);
}
i--;
}
return result;
}
有没有不计算字符的更简单的解决方案(可能是 JQuery 或正则表达式)?
这类似于 Get parent element of a selected text 但我不需要选择,只需要一个字符索引。
【问题讨论】:
标签: javascript string screen