sc = range.startContainer, so = range.startOffsest
ec = range.endContainer, eo=range.endOffset
startNode = (sc.nodeType == 3 || so === 0) ? sc : sc.childNodes[so - 1],
endNode = (ec.nodeType == 3 || eo === 0) ? ec : ec.childNodes[eo - 1];
三种情况:文本节点,偏移量为0,偏移量不为0
range开始节点和结束节点
原文:http://www.cnblogs.com/znsongshu/p/6079392.html