2016-12-02 18:12:34 +01:00
<!DOCTYPE html>
2013-10-16 13:13:30 +02:00
< html >
2016-12-02 18:12:34 +01:00
< head >
< meta charset = "utf-8" >
< link rel = "shortcut icon" type = "image/ico" href = "http://www.datatables.net/favicon.ico" >
2020-05-21 11:25:40 +02:00
< meta name = "viewport" content = "width=device-width, initial-scale=1, minimum-scale=1.0, user-scalable=no" >
2016-12-02 18:12:34 +01:00
< title > DataTables example - Child rows (show extra / detailed information)< / title >
< link rel = "stylesheet" type = "text/css" href = "../../media/css/jquery.dataTables.css" >
< link rel = "stylesheet" type = "text/css" href = "../resources/syntax/shCore.css" >
< link rel = "stylesheet" type = "text/css" href = "../resources/demo.css" >
< style type = "text/css" class = "init" >
2013-10-16 13:13:30 +02:00
td.details-control {
background: url('../resources/details_open.png') no-repeat center center;
cursor: pointer;
}
2014-03-03 11:18:02 +01:00
tr.shown td.details-control {
2013-10-16 13:13:30 +02:00
background: url('../resources/details_close.png') no-repeat center center;
}
2016-12-02 18:12:34 +01:00
< / style >
2020-05-21 11:59:45 +02:00
< script type = "text/javascript" language = "javascript" src = "https://code.jquery.com/jquery-3.5.1.js" > < / script >
2018-06-14 12:03:39 +02:00
< script type = "text/javascript" language = "javascript" src = "../../media/js/jquery.dataTables.js" > < / script >
< script type = "text/javascript" language = "javascript" src = "../resources/syntax/shCore.js" > < / script >
< script type = "text/javascript" language = "javascript" src = "../resources/demo.js" > < / script >
2016-12-02 18:12:34 +01:00
< script type = "text/javascript" language = "javascript" class = "init" >
2013-10-16 13:13:30 +02:00
/* Formatting function for row details - modify as you need */
function format ( d ) {
// `d` is the original data object for the row
return '< table cellpadding = "5" cellspacing = "0" border = "0" style = "padding-left:50px;" > '+
'< tr > '+
'< td > Full name:< / td > '+
'< td > '+d.name+'< / td > '+
'< / tr > '+
'< tr > '+
'< td > Extension number:< / td > '+
'< td > '+d.extn+'< / td > '+
'< / tr > '+
'< tr > '+
'< td > Extra info:< / td > '+
'< td > And any further details here (images etc)...< / td > '+
'< / tr > '+
'< / table > ';
}
$(document).ready(function() {
var table = $('#example').DataTable( {
"ajax": "../ajax/data/objects.txt",
"columns": [
{
2014-11-28 11:02:22 +01:00
"className": 'details-control',
2013-11-12 20:18:51 +01:00
"orderable": false,
2013-10-16 13:13:30 +02:00
"data": null,
"defaultContent": ''
},
{ "data": "name" },
{ "data": "position" },
{ "data": "office" },
{ "data": "salary" }
],
2013-11-12 20:18:51 +01:00
"order": [[1, 'asc']]
2013-10-16 13:13:30 +02:00
} );
// Add event listener for opening and closing details
$('#example tbody').on('click', 'td.details-control', function () {
2014-05-30 12:10:36 +02:00
var tr = $(this).closest('tr');
2013-10-16 13:13:30 +02:00
var row = table.row( tr );
if ( row.child.isShown() ) {
// This row is already open - close it
2014-06-18 14:45:27 +02:00
row.child.hide();
2013-10-16 13:13:30 +02:00
tr.removeClass('shown');
}
else {
// Open this row
row.child( format(row.data()) ).show();
tr.addClass('shown');
}
} );
} );
2016-12-02 18:12:34 +01:00
< / script >
< / head >
< body class = "dt-example" >
< div class = "container" >
< section >
< h1 > DataTables example < span > Child rows (show extra / detailed information)< / span > < / h1 >
< div class = "info" >
2020-05-21 11:25:40 +02:00
< p > The DataTables API has a number of methods for attaching child rows to a < em > parent< / em > row in the DataTable. This can be used to show additional information
about a row, useful for cases where you wish to convey more information about a row than there is space for in the host table.< / p >
2016-12-02 18:12:34 +01:00
< p > The example below makes use of the < a href = "//datatables.net/reference/api/row().child" > < code class = "api" title = "DataTables API method" > row().child< / code > < / a >
2020-05-21 11:25:40 +02:00
methods to first check if a row is already displayed, and if so hide it (< a href = "//datatables.net/reference/api/row().child.hide()" > < code class = "api" title =
2016-12-02 18:12:34 +01:00
"DataTables API method">row().child.hide()< / code > < / a > ), otherwise show it (< a href = "//datatables.net/reference/api/row().child.show()" > < code class = "api" title =
2020-05-21 11:25:40 +02:00
"DataTables API method">row().child.show()< / code > < / a > ). The content of the child row in this example is defined by the < code > format()< / code > function, but you
would replace that with whatever content you wanted to show, possibly including, for example, < a href = "https://www.datatables.net/blog/2017-03-31" > an Ajax call to
the server< / a > to obtain any extra information.< / p >
2016-12-02 18:12:34 +01:00
< / div >
2016-12-02 18:58:11 +01:00
< div class = "demo-html" > < / div >
2020-05-21 11:25:40 +02:00
< table id = "example" class = "display" style = "width:100%" >
2016-12-02 18:12:34 +01:00
< thead >
< tr >
< th > < / th >
< th > Name< / th >
< th > Position< / th >
< th > Office< / th >
< th > Salary< / th >
< / tr >
< / thead >
< tfoot >
< tr >
< th > < / th >
< th > Name< / th >
< th > Position< / th >
< th > Office< / th >
< th > Salary< / th >
< / tr >
< / tfoot >
< / table >
< ul class = "tabs" >
< li class = "active" > Javascript< / li >
< li > HTML< / li >
< li > CSS< / li >
< li > Ajax< / li >
< li > Server-side script< / li >
< / ul >
< div class = "tabs" >
< div class = "js" >
< p > The Javascript shown below is used to initialise the table shown in this example:< / p > < code class = "multiline language-js" > /* Formatting function for row details - modify as you need */
2013-10-16 13:13:30 +02:00
function format ( d ) {
// `d` is the original data object for the row
return '< table cellpadding=" 5" cellspacing=" 0" border=" 0" style=" padding-left:50px;" > '+
'< tr> '+
'< td> Full name:< /td> '+
'< td> '+d.name+'< /td> '+
'< /tr> '+
'< tr> '+
'< td> Extension number:< /td> '+
'< td> '+d.extn+'< /td> '+
'< /tr> '+
'< tr> '+
'< td> Extra info:< /td> '+
'< td> And any further details here (images etc)...< /td> '+
'< /tr> '+
'< /table> ';
}
$(document).ready(function() {
var table = $('#example').DataTable( {
" ajax" : " ../ajax/data/objects.txt" ,
" columns" : [
{
2014-11-28 11:02:22 +01:00
" className" : 'details-control',
2013-11-12 20:18:51 +01:00
" orderable" : false,
2013-10-16 13:13:30 +02:00
" data" : null,
" defaultContent" : ''
},
{ " data" : " name" },
{ " data" : " position" },
{ " data" : " office" },
{ " data" : " salary" }
],
2013-11-12 20:18:51 +01:00
" order" : [[1, 'asc']]
2013-10-16 13:13:30 +02:00
} );
// Add event listener for opening and closing details
$('#example tbody').on('click', 'td.details-control', function () {
2014-05-30 12:10:36 +02:00
var tr = $(this).closest('tr');
2013-10-16 13:13:30 +02:00
var row = table.row( tr );
if ( row.child.isShown() ) {
// This row is already open - close it
2014-06-18 14:45:27 +02:00
row.child.hide();
2013-10-16 13:13:30 +02:00
tr.removeClass('shown');
}
else {
// Open this row
row.child( format(row.data()) ).show();
tr.addClass('shown');
}
} );
2013-12-19 15:03:24 +01:00
} );< / code >
2016-12-02 18:12:34 +01:00
< p > In addition to the above code, the following Javascript library files are loaded for use in this example:< / p >
< ul >
< li >
2020-05-21 11:59:45 +02:00
< a href = "https://code.jquery.com/jquery-3.5.1.js" > https://code.jquery.com/jquery-3.5.1.js< / a >
2016-12-02 18:12:34 +01:00
< / li >
< li >
< a href = "../../media/js/jquery.dataTables.js" > ../../media/js/jquery.dataTables.js< / a >
< / li >
< / ul >
< / div >
< div class = "table" >
< p > The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:< / p >
< / div >
< div class = "css" >
< div >
< p > This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The
additional CSS used is shown below:< / p > < code class = "multiline language-css" > td.details-control {
2013-10-16 13:13:30 +02:00
background: url('../resources/details_open.png') no-repeat center center;
cursor: pointer;
}
2014-03-03 11:18:02 +01:00
tr.shown td.details-control {
2013-10-16 13:13:30 +02:00
background: url('../resources/details_close.png') no-repeat center center;
2013-12-19 15:03:24 +01:00
}< / code >
2013-10-16 13:13:30 +02:00
< / div >
2016-12-02 18:12:34 +01:00
< p > The following CSS library files are loaded for use in this example to provide the styling of the table:< / p >
< ul >
< li >
< a href = "../../media/css/jquery.dataTables.css" > ../../media/css/jquery.dataTables.css< / a >
< / li >
< / ul >
< / div >
< div class = "ajax" >
< p > This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is
loaded.< / p >
< / div >
< div class = "php" >
< p > The script used to perform the server-side processing for this table is shown below. Please note that this is just an example script using PHP. Server-side
processing scripts can be written in any language, using < a href = "//datatables.net/manual/server-side" > the protocol described in the DataTables
documentation< / a > .< / p >
< / div >
< / div >
< / section >
< / div >
< section >
< div class = "footer" >
< div class = "gradient" > < / div >
< div class = "liner" >
< h2 > Other examples< / h2 >
< div class = "toc" >
< div class = "toc-group" >
< h3 > < a href = "../basic_init/index.html" > Basic initialisation< / a > < / h3 >
< ul class = "toc" >
< li >
< a href = "../basic_init/zero_configuration.html" > Zero configuration< / a >
< / li >
< li >
< a href = "../basic_init/filter_only.html" > Feature enable / disable< / a >
< / li >
< li >
< a href = "../basic_init/table_sorting.html" > Default ordering (sorting)< / a >
< / li >
< li >
< a href = "../basic_init/multi_col_sort.html" > Multi-column ordering< / a >
< / li >
< li >
< a href = "../basic_init/multiple_tables.html" > Multiple tables< / a >
< / li >
< li >
< a href = "../basic_init/hidden_columns.html" > Hidden columns< / a >
< / li >
< li >
< a href = "../basic_init/complex_header.html" > Complex headers (rowspan and colspan)< / a >
< / li >
< li >
< a href = "../basic_init/dom.html" > DOM positioning< / a >
< / li >
< li >
< a href = "../basic_init/flexible_width.html" > Flexible table width< / a >
< / li >
< li >
< a href = "../basic_init/state_save.html" > State saving< / a >
< / li >
< li >
< a href = "../basic_init/alt_pagination.html" > Alternative pagination< / a >
< / li >
< li >
< a href = "../basic_init/scroll_y.html" > Scroll - vertical< / a >
< / li >
< li >
< a href = "../basic_init/scroll_y_dynamic.html" > Scroll - vertical, dynamic height< / a >
< / li >
< li >
< a href = "../basic_init/scroll_x.html" > Scroll - horizontal< / a >
< / li >
< li >
< a href = "../basic_init/scroll_xy.html" > Scroll - horizontal and vertical< / a >
< / li >
< li >
< a href = "../basic_init/comma-decimal.html" > Language - Comma decimal place< / a >
< / li >
< li >
< a href = "../basic_init/language.html" > Language options< / a >
< / li >
< / ul >
2015-09-25 11:08:52 +02:00
< / div >
2016-12-02 18:12:34 +01:00
< div class = "toc-group" >
< h3 > < a href = "../advanced_init/index.html" > Advanced initialisation< / a > < / h3 >
< ul class = "toc" >
< li >
< a href = "../advanced_init/events_live.html" > DOM / jQuery events< / a >
< / li >
< li >
< a href = "../advanced_init/dt_events.html" > DataTables events< / a >
< / li >
< li >
< a href = "../advanced_init/column_render.html" > Column rendering< / a >
< / li >
< li >
< a href = "../advanced_init/length_menu.html" > Page length options< / a >
< / li >
< li >
< a href = "../advanced_init/dom_multiple_elements.html" > Multiple table control elements< / a >
< / li >
< li >
< a href = "../advanced_init/complex_header.html" > Complex headers with column visibility< / a >
< / li >
< li >
< a href = "../advanced_init/object_dom_read.html" > Read HTML to data objects< / a >
< / li >
< li >
2019-10-01 14:26:26 +02:00
< a href = "../advanced_init/html5-data-attributes.html" > HTML5 data-* attributes - cell data< / a >
2016-12-02 18:12:34 +01:00
< / li >
< li >
2019-10-01 14:26:26 +02:00
< a href = "../advanced_init/html5-data-options.html" > HTML5 data-* attributes - table options< / a >
2016-12-02 18:12:34 +01:00
< / li >
< li >
< a href = "../advanced_init/language_file.html" > Language file< / a >
< / li >
< li >
< a href = "../advanced_init/defaults.html" > Setting defaults< / a >
< / li >
< li >
< a href = "../advanced_init/row_callback.html" > Row created callback< / a >
< / li >
< li >
< a href = "../advanced_init/row_grouping.html" > Row grouping< / a >
< / li >
< li >
< a href = "../advanced_init/footer_callback.html" > Footer callback< / a >
< / li >
< li >
< a href = "../advanced_init/dom_toolbar.html" > Custom toolbar elements< / a >
< / li >
< li >
< a href = "../advanced_init/sort_direction_control.html" > Order direction sequence control< / a >
< / li >
< / ul >
2015-09-25 11:08:52 +02:00
< / div >
2016-12-02 18:12:34 +01:00
< div class = "toc-group" >
< h3 > < a href = "../styling/index.html" > Styling< / a > < / h3 >
< ul class = "toc" >
< li >
< a href = "../styling/display.html" > Base style< / a >
< / li >
< li >
< a href = "../styling/no-classes.html" > Base style - no styling classes< / a >
< / li >
< li >
< a href = "../styling/cell-border.html" > Base style - cell borders< / a >
< / li >
< li >
< a href = "../styling/compact.html" > Base style - compact< / a >
< / li >
< li >
< a href = "../styling/hover.html" > Base style - hover< / a >
< / li >
< li >
< a href = "../styling/order-column.html" > Base style - order-column< / a >
< / li >
< li >
< a href = "../styling/row-border.html" > Base style - row borders< / a >
< / li >
< li >
< a href = "../styling/stripe.html" > Base style - stripe< / a >
< / li >
< li >
< a href = "../styling/bootstrap.html" > Bootstrap 3< / a >
< / li >
2017-08-31 15:49:22 +02:00
< li >
< a href = "../styling/bootstrap4.html" > Bootstrap 4< / a >
< / li >
2016-12-02 18:12:34 +01:00
< li >
< a href = "../styling/foundation.html" > Foundation< / a >
< / li >
< li >
2016-12-02 18:55:17 +01:00
< a href = "../styling/semanticui.html" > Semantic UI< / a >
2016-12-02 18:12:34 +01:00
< / li >
< li >
2016-12-02 18:55:17 +01:00
< a href = "../styling/jqueryUI.html" > jQuery UI ThemeRoller< / a >
2016-12-02 18:12:34 +01:00
< / li >
< li >
< a href = "../styling/material.html" > Material Design (Tech. preview)< / a >
< / li >
< li >
2020-05-21 11:25:40 +02:00
< a href = "../styling/uikit.html" > UIKit 3 (Tech. preview)< / a >
2016-12-02 18:12:34 +01:00
< / li >
< / ul >
2013-10-16 13:13:30 +02:00
< / div >
2016-12-02 18:12:34 +01:00
< div class = "toc-group" >
< h3 > < a href = "../data_sources/index.html" > Data sources< / a > < / h3 >
< ul class = "toc" >
< li >
< a href = "../data_sources/dom.html" > HTML (DOM) sourced data< / a >
< / li >
< li >
< a href = "../data_sources/ajax.html" > Ajax sourced data< / a >
< / li >
< li >
< a href = "../data_sources/js_array.html" > Javascript sourced data< / a >
< / li >
< li >
< a href = "../data_sources/server_side.html" > Server-side processing< / a >
< / li >
< / ul >
< / div >
< div class = "toc-group" >
< h3 > < a href = "./index.html" > API< / a > < / h3 >
< ul class = "toc active" >
< li >
< a href = "./add_row.html" > Add rows< / a >
< / li >
< li >
< a href = "./multi_filter.html" > Individual column searching (text inputs)< / a >
< / li >
< li >
< a href = "./multi_filter_select.html" > Individual column searching (select inputs)< / a >
< / li >
< li >
< a href = "./highlight.html" > Highlighting rows and columns< / a >
< / li >
< li class = "active" >
< a href = "./row_details.html" > Child rows (show extra / detailed information)< / a >
< / li >
< li >
< a href = "./select_row.html" > Row selection (multiple rows)< / a >
< / li >
< li >
< a href = "./select_single_row.html" > Row selection and deletion (single row)< / a >
< / li >
< li >
< a href = "./form.html" > Form inputs< / a >
< / li >
< li >
< a href = "./counter_columns.html" > Index column< / a >
< / li >
< li >
< a href = "./show_hide.html" > Show / hide columns dynamically< / a >
< / li >
< li >
< a href = "./api_in_init.html" > Using API in callbacks< / a >
< / li >
< li >
< a href = "./tabs_and_scrolling.html" > Scrolling and Bootstrap tabs< / a >
< / li >
< li >
< a href = "./regex.html" > Search API (regular expressions)< / a >
< / li >
< / ul >
< / div >
< div class = "toc-group" >
< h3 > < a href = "../ajax/index.html" > Ajax< / a > < / h3 >
< ul class = "toc" >
< li >
< a href = "../ajax/simple.html" > Ajax data source (arrays)< / a >
< / li >
< li >
< a href = "../ajax/objects.html" > Ajax data source (objects)< / a >
< / li >
< li >
< a href = "../ajax/deep.html" > Nested object data (objects)< / a >
< / li >
< li >
< a href = "../ajax/objects_subarrays.html" > Nested object data (arrays)< / a >
< / li >
< li >
< a href = "../ajax/orthogonal-data.html" > Orthogonal data< / a >
< / li >
< li >
< a href = "../ajax/null_data_source.html" > Generated content for a column< / a >
< / li >
< li >
< a href = "../ajax/custom_data_property.html" > Custom data source property< / a >
< / li >
< li >
< a href = "../ajax/custom_data_flat.html" > Flat array data source< / a >
< / li >
< li >
< a href = "../ajax/defer_render.html" > Deferred rendering for speed< / a >
< / li >
< / ul >
< / div >
< div class = "toc-group" >
< h3 > < a href = "../server_side/index.html" > Server-side< / a > < / h3 >
< ul class = "toc" >
< li >
< a href = "../server_side/simple.html" > Server-side processing< / a >
< / li >
< li >
< a href = "../server_side/custom_vars.html" > Custom HTTP variables< / a >
< / li >
< li >
< a href = "../server_side/post.html" > POST data< / a >
< / li >
< li >
< a href = "../server_side/ids.html" > Automatic addition of row ID attributes< / a >
< / li >
< li >
< a href = "../server_side/object_data.html" > Object data source< / a >
< / li >
< li >
< a href = "../server_side/row_details.html" > Row details< / a >
< / li >
< li >
< a href = "../server_side/select_rows.html" > Row selection< / a >
< / li >
< li >
< a href = "../server_side/jsonp.html" > JSONP data source for remote domains< / a >
< / li >
< li >
< a href = "../server_side/defer_loading.html" > Deferred loading of data< / a >
< / li >
< li >
< a href = "../server_side/pipeline.html" > Pipelining data to reduce Ajax calls for paging< / a >
< / li >
< / ul >
2015-09-25 11:08:52 +02:00
< / div >
2016-12-02 18:12:34 +01:00
< div class = "toc-group" >
< h3 > < a href = "../plug-ins/index.html" > Plug-ins< / a > < / h3 >
< ul class = "toc" >
< li >
< a href = "../plug-ins/api.html" > API plug-in methods< / a >
< / li >
< li >
< a href = "../plug-ins/sorting_auto.html" > Ordering plug-ins (with type detection)< / a >
< / li >
< li >
< a href = "../plug-ins/sorting_manual.html" > Ordering plug-ins (no type detection)< / a >
< / li >
< li >
< a href = "../plug-ins/range_filtering.html" > Custom filtering - range search< / a >
< / li >
< li >
< a href = "../plug-ins/dom_sort.html" > Live DOM ordering< / a >
< / li >
< / ul >
< / div >
< / div >
< div class = "epilogue" >
< p > Please refer to the < a href = "http://www.datatables.net" > DataTables documentation< / a > for full information about its API properties and methods.< br >
Additionally, there are a wide range of < a href = "http://www.datatables.net/extensions" > extensions< / a > and < a href =
"http://www.datatables.net/plug-ins">plug-ins< / a > which extend the capabilities of DataTables.< / p >
2020-03-13 10:25:59 +01:00
< p class = "copyright" > DataTables designed and created by < a href = "http://www.sprymedia.co.uk" > SpryMedia Ltd< / a > © 2007-2020< br >
2016-12-02 18:12:34 +01:00
DataTables is licensed under the < a href = "http://www.datatables.net/mit" > MIT license< / a > .< / p >
2015-09-25 11:08:52 +02:00
< / div >
2013-10-16 13:13:30 +02:00
< / div >
2016-12-02 18:12:34 +01:00
< / div >
< / section >
< / body >
2013-10-16 13:13:30 +02:00
< / html >