в jQuery DataTable в дом позиционирования для кнопок
Я только что обновил версию jQuery Datatable до 1.10. А затем я попытался удалить его отставной плагин, такой как" Colvis "и" Tabletools "с расширением" Button". Здесь все отлично работает.
но проблема для меня в том, что я не смог отделить кнопку "Colvis" от кнопок "Tabletool".
"sDom": "B<'row'><'row'<'col-md-6'l><'col-md-6'f>r>t<'row'<'col-md-4'i>><'row'p>B",
"buttons": [
'copyHtml5',
'excelHtml5',
'csvHtml5',
{
extend: 'colvis',
postfixButtons: [ 'colvisRestore' ],
columns: '0,1,2,3,4,5,6'
}
],
language: {
buttons: {
colvis: 'Change columns'
}
}
где в" sDom "буква" B " обозначает кнопки. Поэтому я получаю все четыре кнопки (Copy, Excel, CSV и Colvis) в одной строке. Но мне нужно кнопка "Colvis" должна быть отделена от (копировать, Excel и CSV).
Итак, есть ли способ добавить одну кнопку рядом с полем поиска и другую рядом с разбиением на страницы?
или
есть ли какая-либо конфигурация, доступная в "sDom" или в "Button"?
спасибо!
2 ответов
вы добавляете новые элементы в элементы управления dataTables dom с помощью <'.class'>
или <'#id'>
. Пример, вставьте новый <div id="colvis">
элемент слева от разбиения на страницы,<'#colvis'>
до p
:
"sDom": "B<'row'><'row'<'col-md-6'l><'col-md-6'f>r>t<'row'<'col-md-4'i>><'row'<'#colvis'>p>"
colvis buttons имеет класс .buttons-colvis
, поэтому вы постоянно перемещаете их в введенный #colvis
элемент by:
$('.buttons-colvis').detach().appendTo('#colvis')
это быстрый способ переместить кнопку colvis в другое место.
что касается предложения @GreeKatrina, да - но правильный метод размещения:
var colvis = new $.fn.dataTable.Buttons( table, {
buttons: [
{
extend: 'colvis',
...
}
]
})
colvis.container().appendTo('#colvis')
если у вас #colvis
элемент конечно.
мои рекомендации :
Помимо вышеуказанного жестко закодированного решения, где вы специально нацелены на кнопки colvis, вы можете обезьяны патч dataTables кнопки так каждого расширенная кнопка может иметь . После инициализации кнопка перемещается в указанное container
:
var org_buildButton = $.fn.DataTable.Buttons.prototype._buildButton;
$.fn.DataTable.Buttons.prototype._buildButton = function(config, collectionButton) {
var button = org_buildButton.apply(this, arguments);
$(document).one('init.dt', function(e, settings, json) {
if (config.container && $(config.container).length) {
$(button.inserter[0]).detach().appendTo(config.container)
}
})
return button;
}
использовать :
{
extend: 'colvis',
postfixButtons: [ 'colvisRestore' ],
container : '#colvis', //<---
columns: '0,1,2,3,4,5'
}
демо -> http://jsfiddle.net/v4bLv83h/
как показано в Примере, теперь вы можете указать альтернативный контейнер для каждой кнопки. Обратите внимание, что container
может быть любым элементом, он не должен быть элементом, введенным dom
. Также обратите внимание (как вы можете заметить в скрипке), что вам нужно сделать некоторый стиль, Если вы хотите сделать поток инжектированных элементов правильно вместе с собственными элементами управления, такими как блок разбиения на страницы.
Я не эксперт с библиотекой таблиц данных, но документация говорит, что вы можете иметь несколько коллекций кнопок и вставить их по отдельности. Он также имеет пример для несколько групп кнопки что вы можете использовать вместо того, чтобы ставить "B" несколько раз в dom
вариант, который я не думаю, действителен.
объединение примеров из документации и вашего примера (не проверено):
var table = $('#myTable').DataTable( {
dom: "B<'#colvis row'><'row'><'row'<'col-md-6'l><'col-md-6'f>r>t<'row'<'col-md-4'i>><'row'p>",
buttons: [
'copyHtml5',
'excelHtml5',
'csvHtml5'
]
} );
new $.fn.dataTable.Buttons( table, {
buttons: [
{
extend: 'colvis',
// Shorter than using the language.buttons.colvis option
text: 'Change columns',
postfixButtons: [ 'colvisRestore' ],
columns: '0,1,2,3,4,5,6'
}
]
} );
// To append it at the bottom of the table
// 3 since the colvis button is at the 3rd index in the buttons array
table.buttons( 3, null ).container().appendTo(
table.table().container()
);
// To append it on the first row after the buttons, in the #colvis row
table.buttons( 3, null ).container().appendTo(
$('#colvis'), table.table().container()
);
Если это не работает, позвольте мне знайте, и я обновлю свой ответ.