2012-09-20 13 views
9

Estoy usando el jQuery DataTables plugin, y tengo un ligero problema con la función de filtrado en él. Si tengo una celda de tabla con contenido como <a href='foo6'>Blah</a>, y filtro para "6", esa celda aparecerá, aunque no haya "6" en "Blah". Lo que me gustaría hacer es hacer que el complemento DataTables ignore el HTML al filtrarlo.¿Cómo ignoro HTML al filtrar una tabla de datos jQuery?

He intentado recorrer el sitio de DataTables y he encontrado pistas conflictivas y poco útiles. Una publicación sugirió que necesitaba una opción sType:'html' en la definición de mi aaColumns, pero lo intenté y no sirvió ... más una publicación posterior sugirió que la versión actual de DataTables detecta automáticamente el sType HTML. También encontré este fragmento de código:

// Make filtering ignore HTML (see http://datatables.net/plug-ins/filtering) 
$.fn.dataTableExt.ofnSearch['html'] = function (sData) { 
    var n = document.createElement('div'); 
    n.innerHTML = sData; 
    if (n.textContent) { 
     return n.textContent.replace(/\n/g," "); 
    } else { 
     return n.innerText.replace(/\n/g," "); 
    } 
}; 

que se suponía que arreglaría las cosas ... pero no fue así.

Entonces, mi pregunta es: ¿alguien sabe cómo hacer que DataTables ignore el contenido que no es de texto (es decir, HTML) al filtrar filas?

Respuesta

6

Resultó que tenía una función personalizada mRender en mis encabezados de columna. Lo que es más importante (dado que intenté esto al principio sin verificar el argumento "tipo"), necesita usar el argumento tipo proporcionado a esa función para que solo se aplique al filtrar.

Mi resultado final parecía algo como esto:

aaHeaders: [{ 
    mRender: function(data, type, full) { 
     // If we're filtering, don't look at the HTML; only filter on the text 
     return type == 'filter' ? $(data).text() : data 
    } 
}], //... 
+0

No pude conseguir que esta solución funcionara. ¿Hizo algún otro cambio? – MadChuckle

+0

No es que lo recuerde, lo siento. – machineghost

+0

funcionó para mí. Gracias! – Ross

1

Puede probar esto:

$.fn.dataTableExt.ofnSearch['html'] = function (sData) { 
    return $("<div/>").html(sData).text(); 
} 
+0

Gracias por la sugerencia, pero lo intenté y no funcionó. Incluso agregué una línea de depurador dentro, para comprobar si se estaba ejecutando, pero resultó que el código ni siquiera se estaba ejecutando :-( – machineghost

0
// To override basic search functionality of datatable 
      $.fn.dataTable.ext.search.push(
        function(settings, data, dataIndex) { 
         var tableId = settings['sTableId']; 
         var searchTerm = settings.oPreviousSearch.sSearch; 
         if ('tableId' == tableId){ 
//I added tableId condition as I have multiple table on same page.. 
          if(data[0].indexOf(searchTerm) > -1 ||data[2].indexOf(searchTerm) > -1||data[3].indexOf(searchTerm) > -1||data[4].indexOf(searchTerm) > -1||data[5].indexOf(searchTerm) > -1 || data[6].indexOf(searchTerm) > -1){ 
           return true; 
          }else{ 
           return false; 
          } 
         } 
         return true; 
        } 
      ); 
+0

para acompañar su código, también podría dar una descripción por escrito –

1

solamente actualizar sus datatable.js .. he utilizado 1.9.4 y tiene el mismo problema después de actualizar a 1.10.9 el problema resuelto ..

Cuestiones relacionadas