// Backward compact.
root = root || startNode.getDocument().getBody();
+ // Assign root value if startNode is null (#424)(https://dev.ckeditor.com/ticket/17028).
+ if ( !e ) {
+ e = root;
+ }
+
do {
if ( e.type == CKEDITOR.NODE_ELEMENT ) {
elements.push( e );
block = e;
if ( pathBlockLimitElements[ elementName ] ) {
- // End level DIV is considered as the block, if no block is available. (#525)
+ // End level DIV is considered as the block, if no block is available. (http://dev.ckeditor.com/ticket/525)
// But it must NOT be the root element (checked above).
if ( !block && elementName == 'div' && !checkHasBlock( e ) )
block = e;
* @returns {CKEDITOR.dom.element} The first matched dom element or `null`.
*/
contains: function( query, excludeRoot, fromTop ) {
- var evaluator;
+ var i = 0,
+ evaluator;
+
if ( typeof query == 'string' )
evaluator = function( node ) {
return node.getName() == query;
var elements = this.elements,
length = elements.length;
- excludeRoot && length--;
+
+ if ( excludeRoot ) {
+ if ( !fromTop ) {
+ length -= 1;
+ } else {
+ i += 1;
+ }
+ }
if ( fromTop ) {
elements = Array.prototype.slice.call( elements, 0 );
elements.reverse();
}
- for ( var i = 0; i < length; i++ ) {
+ for ( ; i < length; i++ ) {
if ( evaluator( elements[ i ] ) )
return elements[ i ];
}