Mỗi lần tôi gõ một nhân vật trong một lĩnh vực đầu vào, tôi phân tích sự biểu hiện vì vậy mà tôi nhận được:Làm cách nào để nhập kiểu văn bản khi nhập?
- Một mảng của thẻ, ví dụ, tokenArray = [2, *, COS, (, 4,)]
- một mảng tương ứng của các loại thẻ, ví dụ, tokenType = [sỐ, ĐIỀU HÀNH, CHỨC NĂNG, (, sỐ,)]
tôi cần phải phong cách mỗi thẻ (ví dụ gán một màu sắc khác nhau cho mỗi token) dựa trên loại mã thông báo tương ứng.
tôi đã có thể dễ dàng phong cách một bản sao năng động của văn bản đầu vào trong một <div>
(không phải là văn bản đầu vào riêng của mình, đó là những gì tôi yêu cầu để được giúp đỡ) khác nhau như sau:
JavaScript:
function processExpression() {
var userInput = document.getElementById('inputText').value;
var resultOutput = parse(userInput); //this generates the two arrays described above
for (i in tokenArray)
newHTML += "<span style='color: " + colorMap[ tokenType[i] ] + " '>" + tokenArray[i] + "</span>";
document.getElementById('styledExpression').innerHTML = newHTML;
}
HTML:
<input type="text" id="inputText" value="" placeholder="Type expression" size="40"
onKeyDown="processExpression();"
onKeyUp="processExpression();"/>
<div id="styledExpression" value=""></div>
Làm thế nào tôi có thể tạo kiểu văn bản đầu vào trực tiếp trong lĩnh vực đầu vào nơi mà tôi gõ? Bất kỳ giải pháp JavaScript nào?
CẬP NHẬT
Câu trả lời của Tim cho câu hỏi replace innerHTML in contenteditable div cung cấp một số trợ giúp tốt.
Làm cách nào bạn sửa đổi http://jsfiddle.net/2rTA5/2/ để giải quyết khi nào ở mỗi lần nhấn phím, một lần có thể chỉnh sửa toàn bộ? Ví dụ: hãy tưởng tượng bạn nhập "= if (AND (3 = 2, A1: A4, OR (0,1)), 5,6)" và, ở mọi lần nhấn phím, nội dung có thể chỉnh sửa sẽ được viết lại theo chương trình (xem mô tả mã thông báo ở trên) và tôi mất con trỏ.
Làm cách nào để giải pháp này bỏ qua loại mã thông báo hoặc ký tự hoặc nút và chỉ cần lưu và khôi phục con trỏ tuyệt đối (từ đầu) vị trí trước khóa phím?
Tôi thực sự mới bắt đầu làm việc trên một vài thứ như thế này rs trước! Nó không phải dễ dàng, nhưng những gì tôi có cho đến nay có thể giúp bạn bắt đầu: https://github.com/minitech/OpenEdit – Ryan
Ngoài ra, bạn cũng có thể thử tạo ra những thứ "minh bạch và tạo kiểu" đằng sau nó. Điều này làm việc tốt nhất cho màu nền, nhưng bạn cũng có thể làm cho văn bản trong suốt để có được hiệu ứng tạo kiểu đơn giản. – Ryan
Xin cảm ơn tất cả mọi người! – Gian