Bạn có thể thêm chức năng này vào các HTMLTableRowElement bản địa bằng cách thay đổi nó nguyên mẫu:
HTMLTableRowElement.prototype.insertCell = (function(oldInsertCell) {
return function(index) {
if (this.parentElement.tagName.toUpperCase() == "THEAD") {
if (index < -1 || index > this.cells.length) {
// This case is suppose to throw a DOMException, but we can't construct one
// Just let the real function do it.
} else {
let th = document.createElement("TH");
if (arguments.length == 0 || index == -1 || index == this.cells.length) {
return this.appendChild(th);
} else {
return this.insertBefore(th, this.children[index]);
}
}
}
return oldInsertCell.apply(this, arguments);
}
})(HTMLTableRowElement.prototype.insertCell);
Sau khi mã này được chạy, bất kỳ HTMLTableRowElements mới ("td" thẻ) sẽ kiểm tra xem nếu phụ huynh là một thẻ thead. Nếu vậy, nó sẽ thực hiện chức năng tương tự như insertCell, nhưng thay vào đó, sử dụng thẻ thứ. Nếu không, nó sẽ chỉ sử dụng chức năng insertCell gốc.
Lưu ý rằng it is generally not recommended to extend the native objects.
Nguồn
2017-11-24 23:21:05
Xin lưu ý, 'th' con như ngay lập tức 'thead' là không hợp lệ và có thể dẫn đến kết quả không mong muốn trong các trình duyệt khác nhau. Cách bố trí hợp lệ là như thế này: 'table-> thead-> tr-> th' –
Xin lỗi, xấu của tôi, tôi có nghĩa là' th' bên trong tr của thead. –
Tôi đã sửa câu trả lời của mình bằng 'tr' bên trong' thead' :-) –