私はUIWebView
に静的なテキストコンテンツを持ち、Webビューのコンテンツに特定のNSRange
のテキストの矩形を取得する必要があります。UIWebViewの範囲の四角形
これについては、javascriptを使用していますが、どこから始めたらよいか分かりません。あなたはこれについてどうやって行きますか?
私はUIWebView
に静的なテキストコンテンツを持ち、Webビューのコンテンツに特定のNSRange
のテキストの矩形を取得する必要があります。UIWebViewの範囲の四角形
これについては、javascriptを使用していますが、どこから始めたらよいか分かりません。あなたはこれについてどうやって行きますか?
ここで私が作ってみたソリューションです、実際に取得する方法についてアントンに感謝ノードからのClientRect
。私が基本的に実装したのは、プレーンテキストの範囲から開始ノード、ノードの開始位置、終了ノード、ノードの終了位置に到達する方法です。すべてが理にかなっているが、問題はNSRangeがこれを無視し、テキストだけで動作しながら、コンテンツがいくつかのdivのとフォントタグのが含まれていることです
function boundingRectForRange(rangeStart, rangeEnd, node) {
var startNode = null;
var endNode = null;
var startPositionInNode = 0;
var endPositionInNode = 0;
var elapsed = 0;
var rangeStartComputed = 0;
var childNodes = node.childNodes;
for (var i=0;i<childNodes.length;i++) {
var item = childNodes[i];
var textContent = item.textContent;
var length = textContent.length;
var newElapsed = elapsed + length;
if (rangeStart <= newElapsed && rangeStartComputed == 0) {
startNode = item;
startPositionInNode = rangeStart - elapsed;
rangeStartComputed = 1;
}
if (rangeEnd <= newElapsed && rangeStartComputed == 1) {
endNode = item;
endPositionInNode = rangeEnd - elapsed;
break;
}
elapsed = newElapsed;
}
if (startNode == null || endNode == null) {
return false;
}
if (startNode.toString() != '[object Text]') {
startNode = startNode.childNodes[0];
}
if (endNode.toString() != '[object Text]') {
endNode = endNode.childNodes[0];
}
// Got every sorted let's get these co-ordinates
var range = document.createRange();
range.setStart(startNode, startPositionInNode);
range.setEnd(endNode, endPositionInNode);
var rects = range.getClientRects(); // Array of rects
var firstRect = rects[0];
var x = firstRect.left;
var width = firstRect.right - x;
var height = firstRect.bottom - firstRect.top;
var y = firstRect.top;
var retVal = '{{'+x+','+y+'},{'+width+','+height+'}}';
return retVal;
}
あなたはそれが、このコードで行うことができるテキストのClientRectsを取得するためにRangeオブジェクトが必要であることを意味している場合:
var rangeW3C = document.createRange(),
textNode = document.getElementById('someId').firstChild; // assume that it would be point to a text node with content
rangeW3C.selectNode(textNode);
// if you need rect of all text node
var textNodeRect = rangeW3C.getClientRects(); // array-like object with rects
// if you need rect of some character in text node, for example first character
rangeW3C.setStart(textNode, 0);
rangeW3C.setEnd(textNode, 1);
var firstCharacterRect = rangeW3C.getClientRects()[0];
。だから私の問題は、どのように正しいテキストノードとそれの範囲を取得して、他のすべてが正しく動作するかということです。 – Joshua
このメソッドは、文字数をテキストで返しますか?座標(x、y)で表されますか?私はJSに精通していません。私は文字の中で文字番号を取得する必要があります。 – Ketan
これは、質問が要求したとおりの座標を返します。 – Joshua
UIWebViewのJavaスクリプトから文字位置を取得する方法はありますか – Ketan