range.startContainer と range.endContainer は二通りのケースがあり、 これが話をややこしくする。 (ケース1) startContainer と endContainer がText Nodeの場合、 startOffset と endOffset は文字の位置を示す。 (ケース2) startContainer と endContainer がElementの場合、 startOffset と endOffset は、childNodes の Indexを示す。 このページでは、(ケース1)を(ケース2)に直す(normalizeBoundaries) Functionを示す。