Tôi đang làm việc trên một trình mô phỏng văn bản/thiết bị đầu cuối đơn giản (tương tự như plugin thiết bị đầu cuối JQuery, nhưng không có các công cụ RPC và chức năng cửa sổ). Mỗi dòng của màn hình là một hàng của bảng (một chuỗi HTML) và lệnh in có thể chèn văn bản với một số thuộc tính (ví dụ: màu nền trước và màu nền). Mỗi văn bản được in được bao quanh bởi một khoảng có thuộc tính kiểu, ví dụ:Nhận các thuộc tính kèm theo thẻ trong chuỗi HTML
<span style="color:#000000;background-color:#111111">A</span><span style="color:#222222;background-color:#333333>BC</span>
Điều này làm việc tốt. Bây giờ tôi muốn thêm một chức năng mang lại cho tôi tất cả các thuộc tính của một nhân vật ở một vị trí màn hình nhất định, trong dòng trên, ký tự ở vị trí 0 (A) có màu # 000000. Vì vậy, tôi phải tính các ký tự không thuộc về thẻ span và nhận được các kiểu trước đó trước. Giải pháp dễ bị lỗi đầu tiên của tôi là:
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;
}
Có giải pháp đơn giản hơn mà không tính các ký tự (có thể là JQuery hoặc regex) không?
Điều này tương tự như Get parent element of a selected text nhưng tôi không cần lựa chọn, chỉ là chỉ mục ký tự.