dijit.range.ie.getEndPoint
dojo.require("dijit._editor.range");
defined in dijit/_editor/range.js
Usage
function (range, end) (view source)
var atmrange = range.duplicate(); atmrange.collapse(!end); var cmpstr = 'EndTo' + (end?'End':'Start'); var parentNode = atmrange.parentElement(); var startnode, startOffset, lastNode; if(parentNode.childNodes.length>0){ dojo.every(parentNode.childNodes, function(node,i){ var calOffset; if(node.nodeType != 3){ atmrange.moveToElementText(node); if(atmrange.compareEndPoints(cmpstr,range) > 0){ startnode = node.previousSibling; if(lastNode && lastNode.nodeType == 3){ //where share we put the start? in the text node or after? startnode = lastNode; calOffset = true; }else{ startnode = parentNode; startOffset = i; return false; } }else{ if(i==parentNode.childNodes.length-1){ startnode = parentNode; startOffset = parentNode.childNodes.length; return false; } } }else{ if(i==parentNode.childNodes.length-1){//at the end of this node startnode = node; calOffset = true; } } // try{ if(calOffset && startnode){ var prevnode = dijit.range.adjacentNoneTextNode(startnode)[0]; if(prevnode){ startnode = prevnode.nextSibling; }else{ startnode = parentNode.firstChild; //firstChild must be a text node } var prevnodeobj = dijit.range.adjacentNoneTextNode(startnode); prevnode = prevnodeobj[0]; var lenoffset = prevnodeobj[1]; if(prevnode){ atmrange.moveToElementText(prevnode); atmrange.collapse(false); }else{ atmrange.moveToElementText(parentNode); } atmrange.setEndPoint(cmpstr, range); startOffset = atmrange.text.length-lenoffset; return false; } // }catch(e){ debugger } lastNode = node; return true; }); }else{ startnode = parentNode; startOffset = 0; } //if at the end of startnode and we are dealing with start container, then //move the startnode to nextSibling if it is a text node //TODO: do this for end container? if(!end && startnode.nodeType!=3 && startOffset == startnode.childNodes.length){ if(startnode.nextSibling && startnode.nextSibling.nodeType==3){ startnode = startnode.nextSibling; startOffset = 0; } } return [startnode, startOffset];
parameter | type | description |
---|---|---|
range | ||
end |