タイトルが正しいかわかりません。コンテンツ編集可能な要素にフォーカスされているときにカーソル位置を取得するためのスニペットを見つけました。私はコード全体を理解していますが、それらが何が良いのかわからない5行があります。
Ok。この行は関数であり、パラメーターとしてTreewalkerに渡されます。そして、彼らは境界点の比較を扱いますが、どのように、そして何のために?私は何日も研究してきましたが、まだistsの機能を見つけていません。
function(node) {
var nodeRange = document.createRange();
nodeRange.selectNode(node);
return nodeRange.compareBoundaryPoints(Range.END_TO_END, range) < 1 ?
NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
}
スニペット全体は次のとおりです(コンテキストに配置するためだけに):
function getCharacterOffsetWithin(range, node) {
var treeWalker = document.createTreeWalker(
node,
NodeFilter.SHOW_TEXT,
function(node) {
var nodeRange = document.createRange();
nodeRange.selectNode(node);
return nodeRange.compareBoundaryPoints(Range.END_TO_END, range) < 1 ?
NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
},
false
);
var charCount = 0;
while (treeWalker.nextNode()) {
charCount += treeWalker.currentNode.length;
}
if (range.startContainer.nodeType == 3) {
charCount += range.startOffset;
}
return charCount;
}
document.body.addEventListener("keyup", function() {
var el = document.getElementById("test");
var range = window.getSelection().getRangeAt(0);
document.getElementById("position").innerHTML = "Caret char pos: " + getCharacterOffsetWithin(range, el);
}, false);
ここでの作業で見ることができます:JS Fiddle
どうもありがとうございました、私はそれを扱う前にこのことを理解したいだけです。長い投稿でごめんなさい。