2010-10-08 35 views
7

Tôi có một DIV định nghĩa với chiều cao cố định:chọn chiều cao thực sự của một DIV trong jQuery

.w { 
    height: 100px; 
    overflow: hidden; 
} 

nếu tôi đặt văn bản trong này nó sẽ ẩn tất cả mọi thứ mà đi vượt ra ngoài 100px. Tôi có một nút hiển thị tất cả văn bản, về cơ bản nó thực hiện điều này:

$('.w').height('auto'); 

điều này sẽ làm cho tất cả văn bản hiển thị, nhưng tôi muốn tạo hiệu ứng này. Và điều đó sẽ không hoạt động với chiều cao = 'tự động', nó phải có chiều cao cụ thể.

Câu hỏi: làm thế nào để tôi nhận được chiều cao mà DIV phải có khả năng hiển thị tất cả văn bản trong đó?

Trả lời

8

Bạn có thể đặt chiều cao thành 'tự động', sau đó đo chiều cao, sau đó đặt lại và bắt đầu hiệu ứng.

Something như thế này (live example):

jQuery(function($) { 

    // Div starts with "style='height: 10px; overflow: hidden" 
    var div = $('#thediv'); 

    // On click, animate it to its full natural height 
    div.click(function() { 
    var oldHeight, newHeight; 

    // Measure before and after 
    oldHeight = div.height(); 
    newHeight = div.height('auto').height(); 

    // Put back the short height (you could grab this first 
    div.height(oldHeight); 
    div.animate({height: newHeight + "px"}, "slow"); 
    }); 
});​ 
+0

div.height ('tự động'). Height() dường như hoạt động tốt! cảm ơn vì giải pháp này. Tôi nghĩ nó thanh lịch hơn một chút so với div [0] .scrollheight. Làm cho nó dễ đọc hơn – patrick

13

thử scrollHeight như thế này:

$('#ID_OF_DIV')[0].scrollHeight 

Note [0], vì nó là tài sản của các yếu tố DOM.

+0

Dường như hoạt động: http://jsbin.com/ecoda/5 –

+0

ok, công trình này thực sự! mảng này có được ghi lại ở đâu đó không? Tôi sẽ không bao giờ đoán được điều này! ;-) – patrick

+1

@patrick: * "là tài liệu mảng này ở đâu đó?" * Có, đây là liên kết: http://docs.jquery.com/Types#jQuery Một cá thể jQuery là (trong số những thứ khác) một mảng giả của các phần tử DOM trong tập hợp hiện tại. Vì vậy, 'var jqobj = $ ('# foo');' cung cấp cho bạn một cá thể jQuery cho phần tử có ID "foo" (nếu có). Bạn có thể truy cập phần tử thô thông qua 'jqobj [0]', và số phần tử được so khớp thông qua 'jqobj.length'. ** Không giống như ** một mảng thực, bạn nên xử lý thuộc tính 'length' và các phần tử thành chỉ đọc. (tiếp theo) –

0

T.J. Câu trả lời của Crowder không phù hợp với tôi vì "oldHeight" là giá trị pixel được tính toán, khác với giá trị rem tôi đã chỉ định trong biểu định kiểu của tôi. Ngoài ra, kiểu nội tuyến đã vượt qua một chiều cao khác mà tôi đã có cho một truy vấn phương tiện khác. Vì vậy, thay vì lưu "oldHeight" và đưa nó trở lại sau, tôi chỉ xóa phong cách nội tuyến của jQuery bằng cách đặt css 'height' thành một chuỗi rỗng.

jQuery(function($) { 

    // Div starts with "style='height: 10px; overflow: hidden" 
    var div = $('#thediv'); 

    // On click, animate it to its full natural height 
    div.click(function() { 
     // Measure after 
     var newHeight = div.height('auto').height(); 

     // Remove inline styles 
     div.css('height', ''); 
     div.animate({height: newHeight + "px"}, "slow"); 

    }); 
});​ 
Các vấn đề liên quan