Quindi ho questo datatable generato dinamicamente da php una volta. Ma una volta caricato, non voglio ricaricare l'intero tavolo poiché c'è solo un piccolo javascript se l'affermazione che sto facendo. Quando si preme il pulsante, confronto un attributo di dati che si trova sul mio tr. Se non va bene, mi piacerebbe nasconderli, altrimenti mi piacerebbe mostrarli. Quindi ecco cosa ho provato finora.Datatable nascondere e mostrare le righe in base a un evento click del pulsante
HTML
<div style="margin: 30px 0;">
<button class="btn btn-primary" id="myClientButton">Voir mes clients seulements</button>
</div>
<table id="advancedSearchTable">
<thead>
<tr>
<th>Name</th>
<th>Phone</th>
<th>Email</th>
<th>Subject</th>
<th>Date</th>
<th>Profile</th>
</tr>
</thead>
<tbody>
{% for entity in entities %}
<tr data-user="{{ entity.user.id }}" class="values">
<td>{{ entity }}</td>
<td>{{ entity.mainphone }}</td>
<td>{{ entity.email }}</td>
<td>{{ entity.tagline }}</td>
<td>{{ entity.createdDate|date('d-m-Y') }}</td>
<td><a href="{{ path('clients_show', {id: entity.id}) }}" class="btn btn-success"><span class="glyphicon glyphicon-eye-open"></span></a></td>
</tr>
{% endfor %}
</tbody>
</table>
The Loop è realizzato in Symfony 2 (Usando Ramoscello Template, se non si capisce che non importa) tutto ciò che dovete capire è che l'attributo "Dati -user "è creato da PHP e ogni voce del mio database sta andando in questo ciclo.
Poi, in jQuery ho questo:
<script>
$('#advancedSearchTable').DataTable(
{
"language": {
"url": "//cdn.datatables.net/plug- ins/9dcbecd42ad/i18n/French.json"
},
responsive: true
});
$('#myClientButton').on('click', function(){
if ($(this).hasClass('active')){
$(this).removeClass('active');
$('tr.values').show();
}
else{
$(this).addClass('active');
$('tr.values').each(function(){
if ($(this).attr('data-user') != 5){
$(this).hide();
}
});
}
});
</script>
funziona molto bene. L'unico problema è che DataTable non sta "sostituendosi". Ad esempio, se ha 25 pagine, mantiene 25 pagine e quando si preme il pulsante "next table page", si aggiorna la "table page" e le cose non sono più nascoste. Ho cercato molto ma non ho trovato il modo. Non voglio davvero usare ajax per questo, dal momento che deve essere riempito solo una volta con valore e quindi dovrà solo essere nascosto o mostrato a seconda del pulsante attivo o meno ... È anche possibile usare questo jQuery collegare ?
Grazie in anticipo.
Penso che questo è dovuto al fatto che stai nascondendo gli elementi sul lato client, e quando la pagina DataTable recupera una nuova serie di dati che non è a conoscenza di ciò che si 'precedentemente nascosto. Effettivamente stai cercando di utilizzare i dati lato server con il filtro sul lato client. – markpsmith
No sto usando il lato client per nascondere. Chiaramente non funziona perché i dati che nascondo non vengono calcolati nella tabella dati. Ad esempio, nascondo metà della riga ma continua a dire "mostrare 20 di 150 articoli" (ad esempio) ... Coud I aggiorna la tabella dei dati? –
Se si aggiorna il datatable, le righe verranno visualizzate di nuovo perché i dati sottostanti non sono stati modificati. – markpsmith