將每個字符放在文檔模型對象中並不像它聽起來那樣討厭。 HTML解析,DOM表示,和事件處理是在現代瀏覽器的內存和處理方面非常有效。類似的機制也用於低級別來渲染角色。模擬瀏覽器在該級別上所做的工作需要很多工作。
- 大多數文件構造有可變寬度的字符
- 包裝可以是合理的或以多種方式排列
- 沒有字符之間的一對一的映射和字節
- 要成爲一個真正的國際化和強大的解決方案,替代對必須得
這個例子是輕量級的快速支持,負載,並且是端口能夠跨越常見的瀏覽器。它的優雅並不一目瞭然,通過建立國際角色和事件聽衆之間的一對一對應關係,獲得了很多可靠性。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Character Click Demo</title>
<script type='text/javascript'>
var pre = "<div onclick='charClick(this, ";
var inf = ")'>";
var suf = "</div>";
function charClick(el, i) {
var p = el.parentNode.id;
var s = "para '" + p + "' idx " + i + " click";
ele = document.getElementById('result');
ele.innerHTML = s; }
function initCharClick(ids) {
var el; var from; var length; var to; var cc;
var idArray = ids.split(" ");
var idQty = idArray.length;
for (var j = 0; j < idQty; ++ j) {
el = document.getElementById(idArray[j]);
from = unescape(el.innerHTML);
length = from.length;
to = "";
for (var i = 0; i < length; ++ i) {
cc = from.charAt(i);
to = to + pre + i + inf + cc + suf; }
el.innerHTML = to; } }
</script>
<style>
.characters div {
padding: 0;
margin: 0;
display: inline }
</style>
</head>
<body class='characters' onload='initCharClick("h1 p0 p2")'>
<h1 id='h1'>Character Click Demo</h1>
<p id='p0'>æ€ – ࿗Ø —</p>
<p id='p1'>Next E para.</p>
<p id='p2'>© 2017</p>
<hr>
<p id='result'> </p>
</body>
</html>
[1]這個簡單的例子不具有用於處理代理對,但這樣可能會在i循環體被加入。
檢查的位置插入符http://blog.vishalon.net/index.php/javascript-getting-and-setting-caret-position-in-textarea/ – 2012-08-01 03:49:59
這不是一個textarea – Michael 2012-08-01 03:53:39
*您應該*能夠爲每個字符創建一個文本節點,然後讓相關事件引用該節點。但是,我所知道的只有一個瀏覽器實現了該模型,現在它符合只允許元素成爲事件目標的更普遍模型。 – RobG 2012-08-01 04:17:37