我正在研究一个简单的文本屏幕/终端仿真器(类似于JQuery终端插件,但没有RPC内容和窗口功能)。 屏幕的每一行都是一个表格行(一个HTML字符串),打印命令可以插入带有一些属性(例如前景色和背景色)的文本。每个打印的文本 都包含一个带有样式属性的跨度,例如:获取HTML字符串中封闭标签的属性
<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 类似,但我不需要选择,只是一个字符索引。