一部のノードの各文字の位置(左上、上端)を取得する方法は?私はただ一つの方法を知っています:それ自身のタグ内のすべての文字をラップし、次にそれを座標にすることができます。しかし少しゆっくりですすべての文字の位置を取得する方法
答えて
私は質問に答えが見つかりました - 範囲のインターフェイスは私が必要とするすべての情報を表示することができます(詳細 - 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. 文書内のすべてのHTMLタグの文字位置を取得するための推奨方法
- 3. NSStringの文字の位置を取得
- 4. サーバー上のSVGテキストの個々の文字位置を取得する方法
- 5. 文字列内の文字を見つけて位置を取得する - ruby
- 6. C言語でアルファベットで文字の位置を取得する方法は?
- 7. 文字列補間とマクロ:StringContextと式の位置を取得する方法
- 8. Python 3.4でアルファベットで文字の位置を取得する方法は?
- 9. マーシャリングChar *。すべての文字を取得する方法
- 10. String内のすべての一致の位置を取得する方法は?
- 11. 文字列から特定の文字を位置で取得する
- 12. 特定の文字位置の次の文字を取得します。
- 13. EditTextで選択した文字または文字列の位置を取得する方法
- 14. 文章中の特定の文字の位置を取得する
- 15. 並べ替え後の元のベクトルの位置値を取得する方法
- 16. 現在開いているエディタで特定の文字列の位置を取得する方法は?
- 17. JavaScriptのキャレット位置の前に最後の文字を取得
- 18. パーツの位置(int)に応じて文字列の一部を取得する方法は?
- 19. PHPで正規表現を使用して日付文字列の位置を取得する方法
- 20. C#を使用して文字列内の部分文字列の最後の文字位置を取得する方法は?
- 21. SQLフィールドの位置に文字を取得
- 22. コードミラー現在の文字位置を取得
- 23. ドラッグ中のmkannotationの位置を取得する方法
- 24. メイトアプレットのウィンドウの原点(位置)を取得する方法は?
- 25. iPhoneのテキストフィールドのカーソル位置を取得する方法
- 26. 最後のスクロールビューの位置を取得する方法、スクロールビュー
- 27. キャンバスの現在のビュー位置を取得する方法は?
- 28. リスト内の要素の位置を取得する方法は?
- 29. 配列内のキーの位置を取得する方法
- 30. CALayer内の点の絶対位置を取得する方法
私はあなたが説明した方法を除いて多くの選択肢がないことを恐れる。すべての文字の位置を知るためには、各文字の正確なサイズを知っていなければならず、各フォントのサイズが文字ごとに異なるため、それはかなり難しい作業です。 –
可能な複製:http://stackoverflow.com/questions/5143534/get要素内のテキストの位置 –