Tình huống: Trang có bảng có nhiều hàng. Tôi muốn sửa lỗi khi đến đầu trang khi cuộn, sử dụng jquery hoặc bất kỳ tập lệnh nào. Tôi không muốn tự xóa chính bảng.Sửa lỗi trên trang cuộn
Trả lời
Bạn có thể sử dụng mã Lobstrosity với một sửa đổi nhỏ: position: fixed
thay vì absolute
.
position: fixed
hiện được chấp nhận rộng rãi bởi tất cả các trình duyệt bao gồm IE8 trở đi. BTW cố định hiển thị đẹp hơn trên thiết bị di động/máy tính bảng hơn position: absolute
.
tôi thấy rằng trên một bảng với độ rộng năng động cho mỗi cột, hoàn toàn vị trí < thead> sẽ mất độ rộng của phần còn lại của các cột, vì vậy để sửa lỗi này tôi đã đưa ra đoạn mã sau:
gì mã này không được như sau:
Xác định độ rộng của mỗi cột trong bảng của bạn bằng cách nhìn lên độ rộng CSS của < tbody> < tr> < td> dòng đầu tiên và lưu trữ chúng trong một mảng cho sau này . Khi người dùng cuộn lớp 'cố định' được thêm vào số < thead> (Hành vi trình duyệt mặc định sẽ thay đổi độ rộng của < th> và chúng sẽ không khớp với số < tbody>. đặt độ rộng của < th> thành giá trị mà chúng tôi đã đọc trước đó.
Dù sao đây là các mã:
CSS
table.entries {width: 100%;border-spacing: 0px;margin:0;}
table.entries thead.fixed {position:fixed;top:0;}
HTML
<table class="entries" id="entriestable">
<thead>
<tr>
<th>Name</th>
<th>Email</th>
<th>Location</th>
<th>DOB</th>
<th>Opt in</th>
<th>Added</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name">Ricky Bobby</td>
<td>[email protected]</td>
<td class="addy"><i>Kent, GB</i></td>
<td class="dob">20/08/1984</td>
<td>Yes</td>
<td class="date">4 hours ago</td>
</tr>
</tbody>
</table>
Javascript
TableThing = function(params) {
settings = {
table: $('#entriestable'),
thead: []
};
this.fixThead = function() {
// empty our array to begin with
settings.thead = [];
// loop over the first row of td's in <tbody> and get the widths of individual <td>'s
$('tbody tr:eq(1) td', settings.table).each(function(i,v){
settings.thead.push($(v).width());
});
// now loop over our array setting the widths we've got to the <th>'s
for(i=0;i<settings.thead.length;i++) {
$('thead th:eq('+i+')', settings.table).width(settings.thead[i]);
}
// here we attach to the scroll, adding the class 'fixed' to the <thead>
$(window).scroll(function() {
var windowTop = $(window).scrollTop();
if (windowTop > settings.table.offset().top) {
$("thead", settings.table).addClass("fixed");
}
else {
$("thead", settings.table).removeClass("fixed");
}
});
}
}
$(function(){
var table = new TableThing();
table.fixThead();
$(window).resize(function(){
table.fixThead();
});
});
Nếu bạn có nhiều bảng, bạn cần chuyển id '# entriestable' làm tham số và khai báo các thiết lập biến cục bộ bên trong hàm' var settings = {table: $ (params.id), thead: []} ' – matteospampani
Đây là thứ mà hoạt động (được kiểm tra nhanh trong FF 3.5, Chrome 3 và IE 8) mà bạn có thể điều chỉnh theo nhu cầu của mình.
Nó sử dụng vị trí tuyệt đối của thead
. Khi thead
trở thành vị trí hoàn toàn, điều này về cơ bản sẽ loại bỏ nó khỏi dòng gốc của table
và độ rộng của tất cả các điều chỉnh tbody
td
s tương ứng. Vì vậy, bạn nhận được hành vi xấu xí nếu bạn không chỉ định chiều rộng cột hoặc nếu tiêu đề của bất kỳ cột nào rộng hơn bất kỳ ô nào khác trong cột đó.
CSS
#Grid thead.Fixed
{
position: absolute;
}
HTML
<table id="Grid">
<thead>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<!-- etc. -->
</tbody>
</table>
jQuery
$(function() {
var table = $("#Grid");
$(window).scroll(function() {
var windowTop = $(window).scrollTop();
if (windowTop > table.offset().top) {
$("thead", table).addClass("Fixed").css("top", windowTop);
}
else {
$("thead", table).removeClass("Fixed");
}
});
});
tôi nhận thấy rằng nó không hoạt động trong IE u nless bạn chỉ định một XHTML DOCTYPE nghiêm ngặt:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<!-- etc. -->
có, tôi đã bắt đầu sử dụng vị trí cố định và hành vi xấu xí đó khiến tôi phải hỏi cho một giải pháp ở đây, để tiết kiệm thời gian. bây giờ, bạn là giải pháp! cảm ơn bạn. – egidiocs
(function ($) {
$.fn.fixedHeader = function() {
return this.filter('table').each(function() {
var that = this;
var $head = $('<div></div>').addClass('head');
$(this).before($head);
$('th', this).each(function() {
var $el = $(this);
var $div = $('<div></div>').width($el.outerWidth()).text(
$el.text());
$head.append($div);
});
$(window).on('scroll', function() {
var $that = $(that);
var w = $(window).scrollTop();
var o = $('th', that).first().offset().top;
var tableO = $that.offset().top + $that.height();
if (o < w && tableO > w) {
$head.show();
} else {
$head.hide();
}
});
});
};
})(jQuery);
Bạn có thể sử dụng plugin jquery này (bạn cần điều chỉnh kiểu đầu. Theo kiểu thead của bạn). Ví dụ làm việc tại đây: http://jsfiddle.net/lukasi/7K52p/1/
- 1. Sửa UIButton trên đầu trang của UIScrollView
- 2. Sửa đổi hướng cuộn
- 3. Trang cuộn MapBox trên cảm ứng
- 4. Cần sửa lỗi div khi cuộn ở 20px từ trên cùng
- 5. Hiệu ứng cuộn tròn trang Android trên bố cục/s
- 6. Sửa lỗi trên số thập phân ngắn
- 7. Phát hiện nếu hiện đang cuộn trang web trên Android
- 8. Cuộn nền cơ thể cố định với trang trên iOS7
- 9. UIScrollView xác định hướng cuộn trên scrollViewDidEndDragging khi phân trang
- 10. Bắt tọa độ của một phần tử trên trang cuộn
- 11. Hoạt ảnh chuyển tiếp cuộn trang trên iPhone
- 12. Một DIV ở trên cùng trong khi trang web cuộn
- 13. Android WebBrowser cuộn xuống trang
- 14. Cuộn cuộn trên iOS -webkit-overflow trên trục sai hoặc không phải ở tất cả
- 15. UITableView với chiều cao ô động - tôi cần phải làm gì để sửa lỗi cuộn xuống?
- 16. Cách cuộn trang bằng selenium
- 17. JQuery cuộn lên đầu trang
- 18. UITextView, cuộn trong khi chỉnh sửa?
- 19. firefox + jquery mousewheel cuộn sự kiện lỗi
- 20. Hiệu ứng cuộn tròn trang Iphone
- 21. Làm cách nào để cuộn trang mẹ lên trên cùng khi trang con nhấp vào iframe?
- 22. Sửa đối tượng lên trên cùng của cửa sổ trình duyệt khi cuộn
- 23. Cuộn trên canvas lớn
- 24. Cuộn một trang web bên trong UIWebView
- 25. Cách cuộn QPlainTextEdit lên đầu trang?
- 26. cách cuộn xuống một trang web
- 27. giới hạn cuộn ở chân trang
- 28. twitter bootstrap sửa thanh điều hướng sau khi cuộn
- 29. Cuộn cột độc lập trong trang HTML
- 30. Các tab cuộn/phân trang JQuery
Tôi đã viết một plugin thực hiện việc này bằng cách sử dụng vị trí cố định hoặc tuyệt đối. Trong khi mã trong câu trả lời hoạt động cho * đó * bảng, nó sẽ không làm việc cho tất cả nhiều bảng, ví dụ bảng với colspans hoặc cột ẩn. Hãy thử thay vào đó: http://mkoryak.github.io/floatThead/ – mkoryak
https://github.com/karaxuna/fixed-table-header – karaxuna