DataTables

by CloudTables

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.1/js/bootstrap.bundle.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.1/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.21/css/dataTables.bootstrap4.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.21/js/jquery.dataTables.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.21/js/dataTables.bootstrap4.min.js"></script>
<table id="example" class="display" width="100%">
    <thead>
        <tr>
            <th>Name</th>
            <th>Position</th>
            <th>Office</th>
            <th>Age</th>
            <th>Start date</th>
            <th>Salary</th>
        </tr>
    </thead>
</table>

CSS

.dropdown-max-width {
  width: 133px;
}

JavaScript

$(document).ready(function() {
  InitializeDatatable();
});

function InitializeDatatable() {
  let ajaxData = GetAjaxData();
  var table = $('#example').DataTable({
    data: ajaxData,
    columns: [{
        "data": "name"
      },
      {
        "data": null,
        render: function(data, type, row){
        	return GetCellHtml();
        }
      },
      {
        "data": "office"
      },
      {
        "data": "extn"
      },
      {
        "data": "start_date"
      },
      {
        "data": "salary"
      }
    ],
    deferRender: true,
    scrollX: true
  });
}

function GetCellHtml() {
	let html = GetDropdown() + GetAnchor();
  html = '<div class="text-nowrap">' + html;
  html += '</div>';
  return html;
}

/**
 * Generates a dropdown
 */
function GetDropdown() {
    var $select = $("<select></select>", {
        "class": "form-control form-control-sm d-inline dropdown-max-width",
        "value": 1
    });

    var $option = $("<option></option>", {
        "text": "None",
        "value": ""
    });
    $select.append($option);

    var $option = $("<option></option>", {
      "text": "one",
      "value": 1
    });
    $option.attr("selected", "selected");
    $select.append($option);

    return $select.prop("outerHTML");
}

/**
 * Generates an anchor.
 */
function GetAnchor() {
    var $poNumberAnchor = $("<a>Link</a>", {
        "class": "px-2",
        "href": "https://datatables.net/forums/discussion/70824/cell-with-dropdown-and-anchor-clips-neighboring-cell",
        "title": "Go to purchase order"
    });

    return $poNumberAnchor.prop("outerHTML");
}

function GetAjaxData() {
  let data = [{
      "id": "1",
      "name": "Tiger Nixon",
      "position": "System Architect",
      "salary": "$320,800",
      "start_date": "2011/04/25",
      "office": "Edinburgh",
      "extn": "5421"
    },
    {
      "id": "2",
      "name": "Garrett Winters",
      "position": "Accountant",
      "salary": "$170,750",
      "start_date":...