function _fnInvalidate( settings, rowIdx, src, colIdx )
		{
			var row = settings.aoData[ rowIdx ];
			var i, ien;
			var cellWrite = function ( cell, col ) {
				// This is very frustrating, but in IE if you just write directly
				// to innerHTML, and elements that are overwritten are GC'ed,
				// even if there is a reference to them elsewhere
				while ( cell.childNodes.length ) {
					cell.removeChild( cell.firstChild );
				}
		
				cell.innerHTML = _fnGetCellData( settings, rowIdx, col, 'display' );
			};
		
			// Are we reading last data from DOM or the data object?
			if ( src === 'dom' || ((! src || src === 'auto') && row.src === 'dom') ) {
				// Read the data from the DOM
				row._aData = _fnGetRowElements(
						settings, row, colIdx, colIdx === undefined$1 ? undefined$1 : row._aData
					)
					.data;
			}
			else {
				// Reading from data object, update the DOM
				var cells = row.anCells;
		
				if ( cells ) {
					if ( colIdx !== undefined$1 ) {
						cellWrite( cells[colIdx], colIdx );
					}
					else {
						for ( i=0, ien=cells.length ; i<ien ; i++ ) {
							cellWrite( cells[i], i );
						}
					}
				}
			}
		
			// For both row and cell invalidation, the cached data for sorting and
			// filtering is nulled out
			row._aSortData = null;
			row._aFilterData = null;
		
			// Invalidate the type for a specific column (if given) or all columns since
			// the data might have changed
			var cols = settings.aoColumns;
			if ( colIdx !== undefined$1 ) {
				cols[ colIdx ].sType = null;
			}
			else {
				for ( i=0, ien=cols.length ; i<ien ; i++ ) {
					cols[i].sType = null;
				}
		
				// Update DataTables special `DT_*` attributes for the row
				_fnRowAttributes( settings, row );
			}
		}
/**
		 * Mark cached data as invalid such that a re-read of the data will occur when
		 * the cached data is next requested. Also update from the data source object.
		 *
		 * @param {object} settings DataTables settings object
		 * @param {int}    rowIdx   Row index to invalidate
		 * @param {string} [src]    Source to invalidate from: undefined, 'auto', 'dom'
		 *     or 'data'
		 * @param {int}    [colIdx] Column index to invalidate. If undefined the whole
		 *     row will be invalidated
		 * @memberof DataTable#oApi
		 *
		 * @todo For the modularisation of v1.11 this will need to become a callback, so
		 *   the sort and filter methods can subscribe to it. That will required
		 *   initialisation options for sorting, which is why it is not already baked in
		 */
Mark cached data as invalid such that a re-read of the data will occur when
the cached data is next requested. Also update from the data source object.



@todo For the modularisation of v1.11 this will need to become a callback, so
the sort and filter methods can subscribe to it. That will required
initialisation options for sorting, which is why it is not already baked in
Mark cached data as invalid such that a re - read of the data will occur when the cached data is next requested . Also update from the data source object . @todo For the modularisation of v1 . 11 this will need to become a callback so the sort and filter methods can subscribe to it . That will required initialisation options for sorting which is why it is not already baked in
function _fnInvalidate( settings, rowIdx, src, colIdx )
		{
			var row = settings.aoData[ rowIdx ];
			var i, ien;
			var cellWrite = function ( cell, col ) {
				while ( cell.childNodes.length ) {
					cell.removeChild( cell.firstChild );
				}
				cell.innerHTML = _fnGetCellData( settings, rowIdx, col, 'display' );
			};
			if ( src === 'dom' || ((! src || src === 'auto') && row.src === 'dom') ) {
				row._aData = _fnGetRowElements(
						settings, row, colIdx, colIdx === undefined$1 ? undefined$1 : row._aData
					)
					.data;
			}
			else {
				var cells = row.anCells;
				if ( cells ) {
					if ( colIdx !== undefined$1 ) {
						cellWrite( cells[colIdx], colIdx );
					}
					else {
						for ( i=0, ien=cells.length ; i<ien ; i++ ) {
							cellWrite( cells[i], i );
						}
					}
				}
			}
			row._aSortData = null;
			row._aFilterData = null;
			var cols = settings.aoColumns;
			if ( colIdx !== undefined$1 ) {
				cols[ colIdx ].sType = null;
			}
			else {
				for ( i=0, ien=cols.length ; i<ien ; i++ ) {
					cols[i].sType = null;
				}
				_fnRowAttributes( settings, row );
			}
		}
function _fnInvalidate ( settings , rowIdx , src , colIdx ) { var row = settings . aoData [ rowIdx ] ; var i , ien ; var cellWrite = function ( cell , col ) { while ( cell . childNodes . length ) { cell . removeChild ( cell . firstChild ) ; } cell . innerHTML = _fnGetCellData ( settings , rowIdx , col , 'display' ) ; } ; if ( src === 'dom' || ( ( ! src || src === 'auto' ) && row . src === 'dom' ) ) { row . _aData = _fnGetRowElements ( settings , row , colIdx , colIdx === undefined$1 ? undefined$1 : row . _aData ) . data ; } else { var cells = row . anCells ; if ( cells ) { if ( colIdx !== undefined$1 ) { cellWrite ( cells [ colIdx ] , colIdx ) ; } else { for ( i = 0 , ien = cells . length ; i < ien ; i ++ ) { cellWrite ( cells [ i ] , i ) ; } } } } row . _aSortData = null ; row . _aFilterData = null ; var cols = settings . aoColumns ; if ( colIdx !== undefined$1 ) { cols [ colIdx ] . sType = null ; } else { for ( i = 0 , ien = cols . length ; i < ien ; i ++ ) { cols [ i ] . sType = null ; } _fnRowAttributes ( settings , row ) ; } }
Mark cached data as invalid such that a re-read of the data will occur when
 the cached data is next requested.
Mark cached data as invalid such that a re - read of the data will occur when the cached data is next requested .
// This is very frustrating, but in IE if you just write directly // to innerHTML, and elements that are overwritten are GC'ed, // even if there is a reference to them elsewhere // Are we reading last data from DOM or the data object? // Read the data from the DOM // Reading from data object, update the DOM // For both row and cell invalidation, the cached data for sorting and // filtering is nulled out // Invalidate the type for a specific column (if given) or all columns since // the data might have changed // Update DataTables special `DT_*` attributes for the row