2015-02-26 8 views
5

Moja aplikacja wymaga od administratorów tworzenia podgrup nazw z dużej listy ponad 1000 dostępnych nazw. Chciałbym, aby zobaczyli wszystkie nazwiska I byli w stanie zawęzić widoczne elementy, wpisując w polu wyszukiwania, aby mogli wybrać coś, czego chcą. Rezultatem może być lista lub tablica rozdzielona przecinkami. Zachowanie Chosen/Select2 nie jest w tym przypadku użyteczne.Używanie datowników jQuery z układem innym niż tabelaryczny

Idealnym rozwiązaniem byłoby posiadanie czegoś w stylu Datatables, w którym można zobaczyć wszystkie elementy i zawęzić wyniki w czasie rzeczywistym, ale ponieważ mam tylko nazwy, wolałbym układ siatki, aby zmaksymalizować przestrzeń, a nie układ tabeli. Czy mogę korzystać z datATables NIE dla tabeli, ale z innych elementów?

Co więcej, mimo że nie dotyczą one danych, czy możesz wskazać mi inne rozwiązania pozwalające uzyskać ten scenariusz w czasie rzeczywistym, filtrując widoczne elementy na stronie?

+0

DataTables przetwarza wszystko do siatki div oparte na tak. Zobacz także typeahead.js i inne rozwiązania typu headhead. – isherwood

+0

Może być również przydatny wariant Select2. http://select2.github.io/examples.html – isherwood

+0

Select2/Wybrane są dobre, ale problemem, w tym przypadku, jest to, że chcemy mieć widok całej listy nazw ptaków i po prostu je na podstawie tego, czego szukamy. Tak więc szukam zachowania typu Datatables, ale stosuję się do każdego rodzaju układu. – lavirius

Odpowiedz

5

Możliwe, że jakiś czas temu używałam go do tego samego. Musisz zastąpić wyjściowy wiersz w row-callback function i zrobić jakąś modyfikację html w init-callback.

Oto pokaz przypadek tej pracy (nie przeszkadza dla obrazów są one losowo;):

enter image description here

Trzeba mieć te dane w formacie JSON wkładka go DataTables, że po zmień wyjście renderowania dla każdego rekordu. To trochę hack, ale jest to wykonalne.

EDIT Przykład: (to jakieś ostre krawędzie, ale to działa;)

$('#example').dataTable({ 
 
    "data": [ 
 
    // some rows data 
 
    ['Trident','Internet Explorer 4.0','Win 95+','4','X'], 
 
    ['Trident','Internet Explorer 5.0','Win 95+','5','C'], 
 
    ['Trident','Internet Explorer 5.5','Win 95+','5.5','A'], 
 
    ['Trident','Internet Explorer 6','Win 98+','6','A'], 
 
    ['Trident','Internet Explorer 4.0','Win 95+','4','X'], 
 
    ['Trident','Internet Explorer 5.0','Win 95+','5','C'], 
 
    ['Trident','Internet Explorer 5.5','Win 95+','5.5','A'], 
 
    ['Trident','Internet Explorer 6','Win 98+','6','A'], 
 
    ['Trident','Internet Explorer 4.0','Win 95+','4','X'], 
 
    ['Trident','Internet Explorer 5.0','Win 95+','5','C'], 
 
    ['Trident','Internet Explorer 5.5','Win 95+','5.5','A'], 
 
    ['Trident','Internet Explorer 6','Win 98+','6','A'] 
 
    ], 
 
    "columns": [ 
 
    { "title": "Engine" }, 
 
    { "title": "Browser" }, 
 
    { "title": "Platform" }, 
 
    { "title": "Version", "class": "center" }, 
 
    { "title": "Grade", "class": "center" } 
 
    ], 
 
    "initComplete": function(settings, json) { 
 
    // show new container for data 
 
    $('#new-list').insertBefore('#example'); 
 
    $('#new-list').show(); 
 
    }, 
 
    "rowCallback": function(row, data) { 
 
    // on each row callback 
 
    var li = $(document.createElement('li')); 
 
    
 
    for(var i=0;i<data.length;i++) { 
 
     li.append('<p>' + data[i] + '</p>'); 
 
    } 
 
    li.appendTo('#new-list'); 
 
    }, 
 
    "preDrawCallback": function(settings) { 
 
    // clear list before draw 
 
    $('#new-list').empty(); 
 
    } 
 
});
ul{ 
 
    margin: 0; 
 
    padding: 0; 
 
    list-style-type: none; 
 
    text-align: center; 
 
} 
 

 
ul li { 
 
    display: inline-block; 
 
    width: 100px; 
 
    border: 1px #CCC solid; 
 
    padding: 10px; 
 
    margin: 3px; 
 
} 
 

 
ul li p { 
 
    margin-top: 2px; 
 
    margin-bottom: 2px; 
 
} 
 

 
.dataTables_length { 
 
    width: 50%; 
 
} 
 

 
.dataTables_filter { 
 
    width: 50%; 
 
}
<link href="http://cdn.datatables.net/1.10.5/css/jquery.dataTables.css" rel="stylesheet"/> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<script src="http://cdn.datatables.net/1.10.5/js/jquery.dataTables.min.js"></script> 
 

 

 
<table id="example" class="display" style="display: none;" cellspacing="0" width="100%"></table> 
 
<ul id="new-list" style="display: none;" />

+0

To zbliża się do tego, czego szukałem. Dostaję fakt, że muszę nadpisać wynik wiersza, ale czy możesz być bardziej szczegółowy o wywołaniu init? – lavirius

+0

@LavaRo W init-callback tworzysz na przykład element 'ul', w którym zamierzasz wstawiać swoje wiersze i ukrywać oryginalną tabelę. Następnie w wierszu-wywołanie zwrotnym wstaw 'wiersz' jako' li' do tego 'ul'. –

+0

Czy możesz podać dokładniejszy przykład kodu? – lavirius

Powiązane problemy