nl_tokens: This is a special jqLite . replaceWith which can replace items which have no parents provided that the containing jqLite collection is provided .
pl_tokens: function replaceWith ( $rootElement , elementsToRemove , newNode ) { var firstElementToRemove = elementsToRemove [ 0 ] , removeCount = elementsToRemove . length , parent = firstElementToRemove . parentNode , i , <mask> ; if ( $rootElement ) { for ( i = 0 , ii = $rootElement . length ; i < ii ; i ++ ) { if ( $rootElement [ i ] === firstElementToRemove ) { $rootElement [ i ++ ] = newNode ; for ( var j = i , j2 = j + removeCount - 1 , jj = $rootElement . length ; j < jj ; j ++ , j2 ++ ) { if ( j2 < jj ) { $rootElement [ j ] = $rootElement [ j2 ] ; } else { delete $rootElement [ j ] ; } } $rootElement . length -= removeCount - 1 ; // If the replaced element is also the jQuery .context then replace it // .context is a deprecated jQuery api, so we should set it only when jQuery set it // http://api.jquery.com/context/ if ( $rootElement . context === firstElementToRemove ) { $rootElement . context = newNode ; } break ; } } } if ( parent ) { parent . replaceChild ( newNode , firstElementToRemove ) ; } // Append all the `elementsToRemove` to a fragment. This will... // - remove them from the DOM // - allow them to still be traversed with .nextSibling // - allow a single fragment.qSA to fetch all elements being removed var fragment = window . document . createDocumentFragment ( ) ; for ( i = 0 ; i < removeCount ; i ++ ) { fragment . appendChild ( elementsToRemove [ i ] ) ; } if ( jqLite . hasData ( firstElementToRemove ) ) { // Copy over user data (that includes AngularJS's $scope etc.). Don't copy private // data here because there's no public interface in jQuery to do that and copying over // event listeners (which is the main use of private data) wouldn't work anyway. jqLite . data ( newNode , jqLite . data ( firstElementToRemove ) ) ; // Remove $destroy event listeners from `firstElementToRemove` jqLite ( firstElementToRemove ) . off ( '$destroy' ) ; } // Cleanup any data/listeners on the elements and children. // This includes invoking the $destroy event on any elements with listeners. jqLite . cleanData ( fragment . querySelectorAll ( '*' ) ) ; // Update the jqLite collection to only contain the `newNode` for ( i = 1 ; i < removeCount ; i ++ ) { delete elementsToRemove [ i ] ; } elementsToRemove [ 0 ] = newNode ; elementsToRemove . length = 1 ; }