Opened 16 years ago
Last modified 11 years ago
#3469 closed Bug
Simply range walking codes — at Initial Version
Reported by: | Garry Yao | Owned by: | |
---|---|---|---|
Priority: | Normal | Milestone: | |
Component: | General | Version: | |
Keywords: | Cc: |
Description
The new range walker API is about to be ready with #3367, it introduced a completely new simplified way to perform daily range work, it's concise and powerful to support the the following ways when walk along range.
We should try to replace the bells and whistles we've had in v2 for ranges manipulation with this new API after we close #3367.
Now we could:
- Walking along the content inside the range, mostly useful for style system.
outside [->...inside...<-]outside
Withvar walker = new CKEDITOR.dom.walker( range ), node; while ( node = walker.next() ) { // Node processing... }
- Walking along the other opposite two sides of the range, mostly useful for enlargement and checking block boundary.
outside <-[ ...inside...]-> outside
With// E.g. Walking along the left out side var walkerRange = new CKEDITOR.dom.range(); walkerRange.setStartAt( document.getBody(), CKEDITOR.POSITION_AFTER_START ); walkerRange.setEndAt( range.startContainer, range.startOffset ); walker.guard = function() { //// Node processing... }; do { node = walker.next() } while ( node )
- Retrieve the boundary nodes of collapsed range:
leftBoundaryNode<-^->rightBoundaryNode
With// E.g. Get the end boundary node after the range. var walkerRange = new CKEDITOR.dom.range(); walkerRange.setStartAt( range.endContainer, range.endOffset ); walkerRange.setEndAt( document.getBody(), CKEDITOR.POSITION_BEFORE_END ); var endBoundaryNode = walkerRange.next();
- Even other usages could be expanded...