一部のノードの各文字の位置(左上、上端)を取得する方法は?私はただ一つの方法を知っています:それ自身のタグ内のすべての文字をラップし、次にそれを座標にすることができます。しかし少しゆっくりですすべての文字の位置を取得する方法
答えて
私は質問に答えが見つかりました - 範囲のインターフェイスは私が必要とするすべての情報を表示することができます(詳細 - http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html)。
のコードは、ここで見つけることができます:https://stackoverflow.com/a/29903556/142317 –
すでに見た文字の幅をキャッシュすることができます。
function findOffset(index) {
// Set some variables early on
var sizes = {},
text = "The text you are getting an offset from.",
lineHeight = 16, // You can get this dynamically if you want
containerWidth = 500, // Same with this one
leftOffset = 0,
topOffset = 0,
i = 0,
cur;
// Loop through and count up the sizes of each character until this one
for (; (i < text.length) && (i <= index); i++) {
// Set the current character
cur = text.charAt(i);
// Check to see if we have a size
if (typeof size[cur] == "undefined") {
// If not: Wrap it in a span (You seemed to already know how to do this)
// then cache the result
size[cur] = findWidthByTemporarilyWrappingInASpan(text, i);
}
// If it's greater than a line can hold, we'll wrap
if ((sizes[cur] + leftOffset) > containerWidth) {
// Reset the left offset
leftOffset = 0;
// Increment the top offset
topOffset += lineHeight;
}
// Otherwise, increment from the left
else {
leftOffset += sizes[cur];
}
}
// return an object with the coordinates
return {
leftOffset: leftOffset,
topOffset : topOffset
};
}
次に、この機能を呼び出すときに取得する各インデックスをメモして、1つずつ閉じることができます。つまり、各キャラクタではなく、普通は〜50(英数字+句読点など)時間を超えない限り、DOMから離れることを意味します。
これは確かにモノスペースフォントでは機能しますが、他のタイプのフォントにはメリットがあると思います。さまざまなブラウザのラッピングリサーチを行うだけです。
また、これは左寄せなどを前提としていることに注意してください。実際のコードソリューションよりも優れています。
良いアイデアは、フォントファミリとフォントサイズ(おそらくjQueryで見つけることができますか?)を考慮に入れて、キャッシュキーに追加する必要があります。典型的なキーは「G_Tahoma_14」となり、別のキーは「G_Tahoma_12」となります。 :) –
Rangeオブジェクトを使って、問題を解決し、スパンノードのすべてのシンボルをラップするよりもはるかに高速です。これを行うための –
- 1. editextのonTouchで文字の位置を取得する方法
- 2. .getSelectedItem()の文字列から位置を取得する方法
- 3. 文書内のすべてのHTMLタグの文字位置を取得するための推奨方法
- 4. NSStringの文字の位置を取得
- 5. 文字列内のすべての改行の位置を取得するためのFastet方法
- 6. JavaScriptのテキストをクリックすると文字の位置を取得する方法
- 7. サーバー上のSVGテキストの個々の文字位置を取得する方法
- 8. 文字列内の文字を見つけて位置を取得する - ruby
- 9. String内のすべての一致の位置を取得する方法は?
- 10. Photonのすべてのプレイヤーの位置を取得する方法
- 11. C言語でアルファベットで文字の位置を取得する方法は?
- 12. 文字列補間とマクロ:StringContextと式の位置を取得する方法
- 13. Python 3.4でアルファベットで文字の位置を取得する方法は?
- 14. sinle lineで詳細なエラー位置(文字の位置)を取得する方法Pythonの式
- 15. マーシャリングChar *。すべての文字を取得する方法
- 16. HTMLの要素の文字位置を取得する
- 17. オブジェクトの位置を取得して位置を変換する方法
- 18. 文字列内にある部分文字列の位置を取得する
- 19. StringBuilder.indexOf()を使用して、発生している文字列のすべての位置を取得します。
- 20. 文字列から特定の文字を位置で取得する
- 21. 特定の文字位置の次の文字を取得します。
- 22. VB.NETは、文字列内の文字の位置を取得します(インデックスの)
- 23. EditTextで選択した文字または文字列の位置を取得する方法
- 24. 並べ替え後の元のベクトルの位置値を取得する方法
- 25. 文章中の特定の文字の位置を取得する
- 26. 現在開いているエディタで特定の文字列の位置を取得する方法は?
- 27. ライブコードの文字列内の文字の位置を操作する方法
- 28. パーツの位置(int)に応じて文字列の一部を取得する方法は?
- 29. テキストファイル内の文字の位置を特定する方法(C++)
- 30. JavaScriptのキャレット位置の前に最後の文字を取得
私はあなたが説明した方法を除いて多くの選択肢がないことを恐れる。すべての文字の位置を知るためには、各文字の正確なサイズを知っていなければならず、各フォントのサイズが文字ごとに異なるため、それはかなり難しい作業です。 –
可能な複製:http://stackoverflow.com/questions/5143534/get要素内のテキストの位置 –