2012-09-20 12 views
9

Używam jQuery DataTables plugin i mam niewielki problem z funkcją filtrowania. Jeśli mam komórkę tabeli z treścią taką jak <a href='foo6'>Blah</a>, a ja filtruję "6", ta komórka pojawi się, nawet jeśli w "Blah" nie ma "6". Chciałbym, aby wtyczka DataTables ignorowała kod HTML podczas filtrowania.Jak zignorować HTML podczas filtrowania tabeli danych jQuery?

Próbowałem przeszukać stronę DataTables i znaleźć sprzeczne, nieużyteczne wskazówki. Jeden post sugerował, że potrzebuję opcji sType:'html' w definicji moich aaColumns, ale próbowałem tego i to nie pomogło ... oraz późniejszy post zasugerował, że aktualna wersja DataTables automatycznie wykrywa typ sType HTML. Znalazłem także ten fragment kodu:

// 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," "); 
    } 
}; 

który miał naprawić rzeczy ... ale tak się nie stało.

Moje pytanie brzmi: czy ktokolwiek wie, jak sprawić, aby DataTables zignorował zawartość nietekstową (np. HTML) podczas filtrowania wierszy?

Odpowiedz

6

Okazało się Potrzebowałem zwyczaj mRender funkcję nagłówków moich kolumn. Co ważniejsze (ponieważ próbowałem tego na początku bez sprawdzania argumentu "typ"), musisz użyć argumentu typu dostarczonego do tej funkcji, aby był stosowany tylko podczas filtrowania.

Mój końcowy wynik wyglądał mniej więcej tak:

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

Nie mogłem uzyskać tego rozwiązania do pracy. Czy zrobiłeś jakieś inne zmiany? – MadChuckle

+0

Nie, że pamiętam, przepraszam – machineghost

+0

Pracowałem dla mnie. Dzięki! – Ross

1

Możesz spróbować tego:

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

Dzięki za sugestię, ale spróbowałem i to nie zadziałało. Dodałem nawet linię debuggera, aby sprawdzić, czy się uruchamia, ale okazało się, że kod nie został nawet trafiony :-( – 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

do twojego kodu, równie dobrze możesz napisać opis –

1

Wystarczy uaktualnić datatable.js .. Użyłem 1.9.4 i mam ten sam problem po uaktualnieniu do 1.10.9 problem rozwiązany ..

Powiązane problemy