2014-09-01 9 views
6

Sau khi định tuyến xung quanh nhiều câu hỏi khác, tôi đã không tìm thấy câu trả lời sửa lỗi của tôi.jQuery .height() xuất ra cùng một giá trị như .scrollHeight trên div với overflow: auto (IE8)

Tôi đang viết một tập lệnh để tìm hiểu xem div có bị tràn hay không. Nhưng khi cố gắng truy xuất chiều cao hiển thị với jQuery.height(), jQuery.innerHeight() hoặc JavaScripts offsetHeight. Tôi được cung cấp giá trị của toàn bộ div (Bao gồm cả phần bị tràn) tức là: giá trị giống như scrollHeight.

Các DIV chứa phong cách:

{ 
    overflow-x: hidden; 
    overflow-y: auto; 
    width: 73%; 
    bottom: 0px; 
    float: left; 
    height: 100%; 
    top: 0px; 
} 

tôi đã tạo ra một mô hình thành từ các kịch bản trên jsFiddle: http://jsfiddle.net/Lukedturnbull/L2bxmszv/3/ (Hãy chắc chắn để làm cho màn hình xem trước nhỏ hơn để tạo thanh cuộn)

+0

Bạn muốn nhắm mục tiêu gì với Jquery để nhận được 'chiều cao'? Thùng chứa, hoặc hộp chứa bên trong? – LcSalazar

+0

Vùng chứa, có một số div bên trong được tạo ra từ cơ sở dữ liệu. –

Trả lời

14

Tất cả mọi thứ có vẻ tốt, jQuery.height()jQuery.innerHeight() không có gì để làm với thuộc tính tràn. Chúng sẽ trả về chiều cao, không chỉ là phần nhìn thấy được.

Nếu bạn muốn biết chiều cao nội dung bạn phải sử dụng scrollHeight. scrollHeight Đây là một tài sản javascript thường xuyên bạn không cần phải sử dụng jQuery

document.getElementById("wrapper").scrollHeight; 

Hoặc bạn có thể sử dụng jQuery selector

Xem jsfiddle làm việc: http://jsfiddle.net/scgz7an5/1/

ý rằng

$('#wrapper').scrollHeight; 

trả về không xác định.

CẬP NHẬT

Bạn quên phần quan trọng nhất của các yếu tố nổi. Bạn quên xóa chúng.

Hãy xem jsfiddle này, là bản chỉnh sửa của bạn nhưng với các yếu tố nổi bị xóa. Ở đó, bạn thấy các giá trị khác nhau cho scrollHeightjQuery.height(). Xem rằng .structureContent là thanh có thanh cuộn, không phải .content không phải .width100.

.structureContentoverflow:auto và thanh cuộn bạn thấy xuất phát từ nó.

http://jsfiddle.net/L2bxmszv/5/

Tôi đã thêm lớp này để xóa các phần tử nổi của bạn.

.clearfix:before, 
.clearfix:after, { 
    content: '\0020'; 
    display: block; 
    overflow: hidden; 
    visibility: hidden; 
    width: 0; 
    height: 0; } 
.clearfix:after { 
    clear: both; } 
.clearfix { 
    zoom: 1; } 

Kết quả là thế này:

.content 
324 for scrollHeight 
324 for clientHeight 
324 for jQuery.height() 
.structureContent 
324 for scrollHeight 
276 for clientHeight 
276 for jQuery.height() 

Xem bài viết tuyệt vời về các yếu tố nổi và thanh toán bù trừ chúng ở đây: http://css-tricks.com/all-about-floats/

+0

Ah, xin lỗi. Tôi có vẻ bối rối. Tôi đã thử tất cả các phương thức scrollHeight sau đây mà bạn đã hiển thị và chúng đang trả lại cùng giá trị như .height() ext .. –

+0

bạn đã thử jsfiddle mà tôi đã đưa ra chưa? mở giao diện điều khiển và xem các giá trị mà họ quay trở lại, scrollHeight trả về giá trị khác với chiều cao –

+0

Vâng, hoạt động tốt, nó dường như không hoạt động trên div cụ thể của tôi. –

0

bây giờ tôi đã tìm thấy một giải pháp cho vấn đề của tôi, mặc dù tôi không hoàn toàn hiểu tại sao nó làm điều này.

Đây không phải là HTML và mã tôi đã viết và tôi chỉ đơn giản viết một bản sửa lỗi để xem thanh cuộn có xuất hiện không. Nhưng tôi thấy rằng việc lấy ScrollHeight và Height của cha mẹ của container đã giải quyết được vấn đề của tôi. So sánh để xem scrollHeight có lớn hơn chiều cao cho phép tôi giải quyết vấn đề hay không.

+0

Xem cập nhật của tôi. Với ví dụ jsfiddle của bạn, tôi có thể biết lý do cho sự thất bại trong trường hợp của bạn. –

+0

Chúc mừng người đàn ông, thật không may là tôi không thể chạm vào bất kỳ phần tử HTML nào vì nó có thể gây rối các trang khác! Nhưng cảm ơn vì thông tin, nó đang hoạt động ngay bây giờ! Cảm ơn rất nhiều. –

+0

Nếu bạn có thể thêm một lớp trong tệp CSS, sau đó thêm lớp và không thay đổi HTML, bạn có thể thêm lớp vào phần tử của bạn bằng Javascript sử dụng '$ ('. StructureContent'). AddClass ('clearfix');'. Bạn có thể giải quyết nó như thế này. –

1

Thanh cuộn bạn đang xem thực sự ở trên phần tử .structureContent chứ không phải trên .content. Đây là lý do tại sao .content trả về tất cả cùng một giá trị. .content không bị cắt ngắn.

Các vấn đề liên quan