Это является продолжением на вопрос от SO Questionвозможность размещения гиперссылки в одном столбце детали DataTables строк
От принятого ответа я был в состоянии получить таблицу работает, как показано в JS Fiddle ниже
`var data = {"data":[{"student_name":"jack","subjects":{"math":{"cat1_grade":"30","cat2_grade":"39","cat3_grade":"38"},"english":{"cat1_grade":"30","cat2_grade":"39","cat3_grade":"38"},"swahili":{"cat1_grade":"30","cat2_grade":"39","cat3_grade":"38"}},"subject1_average":"35","subject2_average":"26","subject3_average":"59"}]};
/* Formatting function for row details - modify as you need */
function format (d) {
// `d` is the original data object for the row
var header = false;
var detail_table = $("<table></table>",{
"cellpadding":"5",
"cellspacing": "0",
"border": "0",
"style":"padding-left:50px;"
});
var tbody = $("<tbody></tbody>");
detail_table.append(tbody);
$.each(d.subjects, function(k, v){
var tbody_row = $("<tr></tr>").append($("<td></td>",{"text": k}));
if(!header){
var thead = $("<thead></thead>");
var thead_row = $("<tr></tr>")
thead_row.append($("<th></th>",{"text":" "}));
$.each(v, function(a, b){
thead_row.append($("<th></th>",{"text":a}));
tbody_row.append($("<td></td>",{"text":b}));
});
thead.append(thead_row);
detail_table.append(thead);
header = true;
}else{
$.each(v, function(a, b){
tbody_row.append($("<td></td>",{"text":b}));
});
}
tbody.append(tbody_row);
});
return detail_table;
}
$(document).ready(function() {
var table = $('#example').DataTable({
"ajax": {
"url": '/echo/js/?js=' + encodeURIComponent(JSON.stringify(data)),
},
"columns": [
{
"className": 'details-control',
"orderable": false,
"data": null,
"defaultContent": ''
},
{ "data": "student_name" },
{ "data": "subject1_average" },
{ "data": "subject2_average" },
{ "data": "subject3_average" }
],
"order": [[1, 'asc']]
});
// Add event listener for opening and closing details
$('#example tbody').on('click', 'td.details-control', function() {
var tr = $(this).closest('tr');
var row = table.row(tr);
if (row.child.isShown()) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
}
else {
// Open this row
row.child(format(row.data())).show();
tr.addClass('shown');
}
});
});
Однако я бы очень хотел, чтобы один из столбцов деталей был гиперссылкой. Поэтому, чтобы быть конкретным, как сделать, чтобы математический стол студента был гиперссылкой, так что, когда пользователь нажимает на математику, они перемещаются по ссылке math.html, например, «http://math.com».
Просто чтобы быть ясно, что я считаю,
$.each(v, function(a, b){
tbody_row.append($("<td></td>",{"text":b}));
});
ли часть, которая создает строку, что я хотел бы, чтобы иметь elemnt X этой строки будет гиперссылки, а все остальные элементы могут быть текст. Я действительно не понимаю javascript, поэтому считаю, что {"text":b}
добавляет элементы в текст в строку. Но я не знаю, как определить элемент Х объекта против быть URL, сохраняя при этом остальные элементы V, как текст
См. [Этот ответ] (http://stackoverflow.com/questions/32760613/jquery-datatable-is-it-possible-to-bind-href-property-of-link-with-razor-syntax/32778950 # 32778950) – markpsmith