제목이 맞는지 잘 모르겠습니다. 문제는 contenteditable 요소에 포커스가있을 때 커서 위치를 가져 오는 스 니펫을 발견했기 때문입니다. 나는 전체 코드를 이해하지만, 내가 잘하는 것을 모르는 5 가지 라인이있다.범위 사이의 경계 지점 비교
확인. 이 선은 Treewalker에 매개 변수로 전달되는 함수입니다. 그리고 경계점을 비교하는 방법을 다루지 만, 어떻게, 그리고 무엇을 위해? 나는 많은 시간을 연구 해 왔으며, 아직 기능을 찾지 못했다.
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 당신에게 많은 감사, 난 그냥 원하는 그것을 작업하기 전에이 물건을 이해하십시오. 긴 우편을 위해 유감스럽게 생각합니다.
Ok ... 답변 해 주셔서 감사합니다. 정말 complet입니다 ... 나는 몇 가지 질문에 대해 조사한 후에도 몇 가지 사항을 알고 있습니다. getRangeAt (index) ... 인덱스는 "range number"를 의미합니까? 예를 들어, 사용자가 두 개 이상의 선택을하면. .. 보통 첫 번째 색인을 얻으려면 index = 0? – Kenedy
그리고 다른 한편으로 ... 선택 유형이 "제어"인지 여부를 확인하면 ... 나는 세 가지 유형이 있음을 알고 있지만이 것은 무엇을 의미하는지 모르겠다 ... (사용자가 여러 선택을 할 때 , 아마도?) – Kenedy
IE의 것입니다. 편집 가능한 요소 내에서 테이블이나 이미지 또는 입력과 같은 개체를 클릭하면 크기 조정 핸들이 표시됩니다. 이런 일이 발생하면 선택 항목은 "Control"유형입니다. IE는 선택적으로 여러 요소를이 방법으로 선택할 수있게합니다. –