123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643 |
- Range API
- ========================================================
- .. contents::
- :depth: 2
- .. index:: K.range
- .. _K.range:
- K.range(mixed)
- --------------------------------------------------------
- 创建或选取KRange对象,KRange是原生Range的封装,包含大部分W3C Range接口,此外还有包含KRange和原生Range之间的转换功能。
- * 参数:
- * document|range mixed: document或原生range
- * 返回: KRange对象
- 示例:
- .. sourcecode:: js
- range = K.range(document);
- range = K.range(originalRange);
- .. note::
- DOM Level 2 Range Reference: http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html
- .. index:: START_TO_START
- .. _START_TO_START:
- K.START_TO_START
- --------------------------------------------------------
- 调用 :ref:`KRange.compareBoundaryPoints` 时使用。
- .. index:: START_TO_END
- .. _START_TO_END:
- K.START_TO_END
- --------------------------------------------------------
- 调用 :ref:`KRange.compareBoundaryPoints` 时使用。
- .. index:: END_TO_END
- .. _END_TO_END:
- K.END_TO_END
- --------------------------------------------------------
- 调用 :ref:`KRange.compareBoundaryPoints` 时使用。
- .. index:: END_TO_START
- .. _END_TO_START:
- K.END_TO_START
- --------------------------------------------------------
- 调用 :ref:`KRange.compareBoundaryPoints` 时使用。
- .. index:: startContainer
- .. _KRange.startContainer:
- startContainer
- --------------------------------------------------------
- range的开始节点。
- .. index:: startOffset
- .. _KRange.startOffset:
- startOffset
- --------------------------------------------------------
- range的开始节点位置。
- .. index:: endContainer
- .. _KRange.endContainer:
- endContainer
- --------------------------------------------------------
- range的结束节点。
- .. index:: endOffset
- .. _KRange.endOffset:
- endOffset
- --------------------------------------------------------
- range的结束节点的位置。
- .. index:: collapsed
- .. _KRange.collapsed:
- collapsed
- --------------------------------------------------------
- range的折叠状态,当range处于折叠状态时true,否则false。。
- .. index:: commonAncestor
- .. _KRange.commonAncestor:
- commonAncestor()
- --------------------------------------------------------
- 取得KRange的共同祖先。
- * 参数: 无
- * 返回: Element
- 示例:
- .. sourcecode:: js
- var range = K.range(document);
- var element = range.commonAncestor();
- .. index:: setStart
- .. _KRange.setStart:
- setStart(node , offset)
- --------------------------------------------------------
- 设置KRange的开始节点和位置。
- * 参数:
- * Node node: 任意节点
- * Int offset: 位置
- * 返回: KRange
- 示例:
- .. sourcecode:: js
- var range = K.range(document);
- range.setStart(document.body, 1);
- .. index:: setEnd
- .. _KRange.setEnd:
- setEnd(node , offset)
- --------------------------------------------------------
- 设置KRange的结束节点和位置。
- * 参数:
- * Node node: 任意节点
- * Int offset: 位置
- * 返回: KRange
- 示例:
- .. sourcecode:: js
- var range = K.range(document);
- range.setEnd(document.body, 2);
- .. index:: setStartBefore
- .. _KRange.setStartBefore:
- setStartBefore(node)
- --------------------------------------------------------
- 将Node的开始位置设置成Range的开始位置。
- * 参数:
- * Node node: 任意节点
- * 返回: KRange
- 示例:
- .. sourcecode:: js
- var range = K.range(document);
- range.setStartBefore(K('div#id')[0]);
- .. index:: setStartAfter
- .. _KRange.setStartAfter:
- setStartAfter(node)
- --------------------------------------------------------
- 将Node的结束位置设置成Range的开始位置。
- * 参数:
- * Node node: 任意节点
- * 返回: KRange
- 示例:
- .. sourcecode:: js
- var range = K.range(document);
- range.setStartAfter(K('div#id')[0]);
- .. index:: setEndBefore
- .. _KRange.setEndBefore:
- setEndBefore(node)
- --------------------------------------------------------
- 将Node的开始位置设置成Range的结束位置。
- * 参数:
- * Node node: 任意节点
- * 返回: KRange
- 示例:
- .. sourcecode:: js
- var range = K.range(document);
- range.setEndBefore(K('div#id')[0]);
- .. index:: setEndAfter
- .. _KRange.setEndAfter:
- setEndAfter(node)
- --------------------------------------------------------
- 将Node的结束位置设置成Range的结束位置。
- * 参数:
- * Node node: 任意节点
- * 返回: KRange
- 示例:
- .. sourcecode:: js
- var range = K.range(document);
- range.setEndAfter(K('div#id')[0]);
- .. index:: selectNode
- .. _KRange.selectNode:
- selectNode(node)
- --------------------------------------------------------
- 将Node的开始位置和结束位置分别设置成Range的开始位置和结束位置。
- * 参数:
- * Node node: 任意节点
- * 返回: KRange
- 示例:
- .. sourcecode:: js
- var range = K.range(document);
- range.selectNode(K('div#id')[0]);
- .. index:: selectNodeContents
- .. _KRange.selectNodeContents:
- selectNodeContents(node)
- --------------------------------------------------------
- 将Node的子节点的开始位置和结束位置分别设置成Range的开始位置和结束位置。对于文本节点和无结束符的元素,相当于使用selectNode。
- * 参数:
- * Node node: 任意节点
- * 返回: KRange
- 示例:
- .. sourcecode:: js
- var range = K.range(document);
- range.selectNodeContents(K('div#id')[0]);
- .. index:: collapse
- .. _KRange.collapse:
- collapse(toStart)
- --------------------------------------------------------
- 折叠KRange,当toStart为true时向前折叠,false时向后折叠。
- * 参数:
- * Boolean toStart: 折叠方向
- * 返回: KRange
- 示例:
- .. sourcecode:: js
- var range = K.range(document);
- range.selectNodeContents(K('div#id')[0]);
- range.collapse(true);
- .. index:: compareBoundaryPoints
- .. _KRange.compareBoundaryPoints:
- compareBoundaryPoints(how , range)
- --------------------------------------------------------
- 根据how参数比较2个range的边界。
- * 参数:
- * Int how: 位置信息,可设置K.START_TO_START、K.START_TO_END、K.END_TO_END、K.END_TO_START。
- * Range range: 目标Range
- * 返回: 当this range在目标range的左侧时返回-1,在目标range的右侧时返回1,相同时返回0。
- how参数的方向规则:
- * K.START_TO_START:比较目标range的开始位置和this range的开始位置。
- * K.START_TO_END:比较目标range的开始位置和this range的结束位置。
- * K.END_TO_END:比较目标range的结束位置和this range的结束位置。
- * K.END_TO_START:比较目标range的结束位置和this range的开始位置。
- 示例:
- .. sourcecode:: js
- var range1 = K.range(document);
- range1.selectNode(K('div#id')[0]);
- var range2 = K.range(document);
- range2.selectNode(K('div#id p')[0]);
- var cmp = range1.compareBoundaryPoints(K.START_TO_START, range2);
- .. index:: cloneRange
- .. _KRange.cloneRange:
- cloneRange()
- --------------------------------------------------------
- 复制KRange。
- * 参数: 无
- * 返回: KRange
- 示例:
- .. sourcecode:: js
- var range = K.range(document);
- range.selectNodeContents(K('div#id')[0]);
- var newRange = range.cloneRange();
- .. index:: toString
- .. _KRange.toString:
- toString()
- --------------------------------------------------------
- 返回KRange的文本内容。
- * 参数: 无
- * 返回: String
- 示例:
- .. sourcecode:: js
- var range = K.range(document);
- range.selectNodeContents(K('div#id')[0]);
- var text = range.toString();
- .. index:: cloneContents
- .. _KRange.cloneContents:
- cloneContents()
- --------------------------------------------------------
- 复制并返回KRange的内容。
- * 参数: 无
- * 返回: documentFragment
- 示例:
- .. sourcecode:: js
- var range = K.range(document);
- range.selectNodeContents(K('div#id')[0]);
- var fragment = range.cloneContents();
- .. index:: deleteContents
- .. _KRange.deleteContents:
- deleteContents()
- --------------------------------------------------------
- 删除KRange的内容。
- * 参数: 无
- * 返回: KRange
- 示例:
- .. sourcecode:: js
- var range = K.range(document);
- range.selectNodeContents(K('div#id')[0]);
- range.deleteContents();
- .. index:: extractContents
- .. _KRange.extractContents:
- extractContents()
- --------------------------------------------------------
- 删除并返回KRange的内容。
- * 参数: 无
- * 返回: documentFragment
- 示例:
- .. sourcecode:: js
- var range = K.range(document);
- range.selectNodeContents(K('div#id')[0]);
- var fragment = range.extractContents();
- .. index:: insertNode
- .. _KRange.insertNode:
- insertNode(node)
- --------------------------------------------------------
- 将指定Node插入到KRange的开始位置。
- * 参数:
- * Node node: 任意Node或documentFragment
- * 返回: KRange
- 示例:
- .. sourcecode:: js
- var range = K.range(document);
- range.selectNodeContents(K('#id1')[0]);
- range.insertNode(K('#id2')[0]);
- .. index:: surroundContents
- .. _KRange.surroundContents:
- surroundContents(node)
- --------------------------------------------------------
- 用指定Node围住KRange的内容。
- * 参数:
- * Element node: 任意节点
- * 返回: KRange
- 示例:
- .. sourcecode:: js
- var range = K.range(document);
- range.selectNodeContents(K('#id1')[0]);
- range.surroundContents(K('#id2')[0]);
- .. index:: isControl
- .. _KRange.isControl:
- isControl()
- --------------------------------------------------------
- 判断当前KRange是否可选择的Contral Range。
- * 参数: 无
- * 返回: Boolean
- 示例:
- .. sourcecode:: js
- var range = K.range(document);
- range.selectNodeContents(K('#id1')[0]);
- var bool = range.isControl();
- .. index:: get
- .. _KRange.get:
- get([hasControlRange])
- --------------------------------------------------------
- 将KRange转换成原生Range并返回。
- * 参数:
- * Boolean hasControlRange: 是否包含Contral Range
- * 返回: Range
- 示例:
- .. sourcecode:: js
- var range = K.range(document);
- range.selectNodeContents(K('#id1')[0]);
- var originalRange = range.get();
- .. index:: html
- .. _KRange.html:
- html()
- --------------------------------------------------------
- 返回KRange内容的HTML。
- * 参数: 无
- * 返回: HTML string
- 示例:
- .. sourcecode:: js
- var range = K.range(document);
- range.selectNodeContents(K('#id1')[0]);
- var html = range.html();
- .. index:: down
- .. _KRange.down:
- down()
- --------------------------------------------------------
- 降低range的位置。
- * 参数: 无
- * 返回: KRange
- 示例:
- .. sourcecode:: js
- // <p><strong><span>123</span>abc</strong>def</p>
- range.setStart(strong, 1);
- range.down();
- console.log(range.startContainer, range.startOffset); // print "abc", 0
- .. index:: up
- .. _KRange.up:
- up()
- --------------------------------------------------------
- 提高range的位置。
- * 参数: 无
- * 返回: KRange
- 示例:
- .. sourcecode:: js
- // <p><strong><span>123</span>abc</strong>def</p>
- range.setStart("abc", 0);
- range.up();
- console.log(range.startContainer, range.startOffset); // print strong, 1
- .. index:: enlarge
- .. _KRange.enlarge:
- enlarge()
- --------------------------------------------------------
- 扩大边界。
- * 参数: 无
- * 返回: KRange
- 示例:
- .. sourcecode:: js
- // <p><strong><span>123</span>abc</strong>def</p>
- range.setStart("123", 0);
- range.setEnd("abc", 3);
- range.enlarge();
- console.log(range.startContainer, range.startOffset); // print p, 0
- console.log(range.endContainer, range.endOffset); // print p, 1
- .. index:: shrink
- .. _KRange.shrink:
- shrink()
- --------------------------------------------------------
- 缩小边界。
- * 参数: 无
- * 返回: KRange
- 示例:
- .. sourcecode:: js
- // <p><strong><span>123</span>abc</strong></p>
- range.setStart(p, 0);
- range.setEnd(p, 1);
- range.shrink();
- console.log(range.startContainer, range.startOffset); // print "123", 0
- console.log(range.endContainer, range.endOffset); // print "abc", 3
- .. index:: createBookmark
- .. _KRange.createBookmark:
- createBookmark([serialize])
- --------------------------------------------------------
- 创建bookmark。(插入临时节点标记位置)
- * 参数:
- * Boolean serialize: bookmark类型,默认值为false,true时bookmark包含临时节点的ID,false时bookmark包含临时节点的Element。
- * 返回: bookmark
- 示例:
- .. sourcecode:: js
- bookmark = range.createBookmark();
- console.log(bookmark); // print {start: startNode, end: endNode}
- bookmark = range.createBookmark(true);
- console.log(bookmark); // print {start: 'start_node_id', end: 'end_node_id'}
- .. index:: moveToBookmark
- .. _KRange.moveToBookmark:
- moveToBookmark(bookmark)
- --------------------------------------------------------
- 根据bookmark重新设置range。
- * 参数:
- * Object bookmark: 通过 :ref:`KRange.createBookmark` 得到的bookmark
- * 返回: KRange
- 示例:
- .. sourcecode:: js
- bookmark = range.createBookmark();
- // 在这里执行一些改变DOM的处理
- // ...
- range.moveToBookmark(bookmark);
|