2011-08-21 21 views
34

Làm cách nào tôi có thể phát hiện tràn văn bản dọc trong phần tử div?Làm thế nào để phát hiện tràn trong phần tử div?

CSS:

div.rounded { 
    background-color:#FFF; 
    height: 123px; 
    width:200px; 
    font-size:11px; 
    overflow:hidden; 
} 

HTML:

<div id="tempDiv" class="rounded"> 
    Lorem ipsum dolor sit amet, 
    consectetur  adipiscing elit. Phasellus vel quam vestibulum orci blandit laoreet. 
</div> 
+2

Bạn có ý nghĩa gì khi "phát hiện" chính xác? Bạn muốn làm gì trong phản ứng, hiển thị thanh cuộn? –

+0

Tôi muốn thay đổi kích thước div trên di chuột nếu văn bản tràn nhưng tôi đã sắp xếp nó ra để nó không phải là một phần của câu hỏi. –

+0

Câu hỏi cũ tương tự với câu trả lời tuyệt vời: https://stackoverflow.com/a/143889/573057 – earcam

Trả lời

45

Bạn có thể easil y làm điều đó bằng cách so sánh scrollHeight với clientHeight, hãy thử như sau:

<script type="text/javascript"> 
function GetContainerSize() 
{ 
    var container = document.getElementById ("tempDiv"); 
    var message = "The width of the contents with padding: " + container.scrollWidth + "px.\n"; 
    message += "The height of the contents with padding: " + container.scrollHeight + "px.\n"; 

    alert (message); 
} 
</script> 

Để biết thêm thông tin xin hãy xem tại địa chỉ: http://help.dottoro.com/ljbixkkn.php

+0

Điều này không hoạt động nếu quy tắc tràn trên div là 'hiển thị', là mặc định. Sử dụng Firefox 18. – Ryan

+0

Nó cũng không cho bạn biết div nào cụ thể đang tràn. – NoBugs

+0

Vấn đề với giải pháp này là nếu phần tử bị ẩn (hoặc là cha mẹ) cả hai đều trả về 0 .. bất kỳ cách giải quyết nào? –

5

sau jQuery plugin sẽ báo kết quả.

CSS

#tempDiv{ 
    height:10px; 
    overflow:hidden; 
}​ 

Để xác định tràn trong chiều rộng,

(function($) { 
    $.fn.isOverflowWidth = function() { 
     return this.each(function() { 
      var el = $(this); 
      if (el.css("overflow") == "hidden") { 
       var text = el.html(); 
       var t = $(this.cloneNode(true)).hide().css('position', 'absolute').css('overflow', 'visible').width('auto').height(el.height()); 
       el.after(t);  
       function width() { 
        return t.width() > el.width(); 
       }; 
       alert(width()); 
      } 
     }); 
    }; 
})(jQuery); 

Để xác định tràn vào chiều cao,

(function($) { 
    $.fn.isOverflowHeight = function() { 
     return this.each(function() { 
      var el = $(this); 
      if (el.css("overflow") == "hidden") { 
       var text = el.html(); 
       var t = $(this.cloneNode(true)).hide().css('position', 'absolute').css('overflow', 'visible').height('auto').width(el.width()); 
       el.after(t); 

       function height() { 
        return t.height() > el.height(); 
       }; 
       alert(height()); 
      } 
     }); 
    }; 
})(jQuery); 

http://jsfiddle.net/C3hTV/

+2

Không chắc chắn đây là cách hiệu quả nhất hoặc tốt nhất để kiểm tra - điều gì xảy ra nếu có tập lệnh trong div cụ thể đó, nó sẽ chạy lại nó – NoBugs

2

Một biến thể của câu trả lời Chamika là để, trong html thực tế của bạn, có một nội và bên ngoài Div. Div bên ngoài sẽ có chiều cao và chiều rộng và tràn ẩn tĩnh. Div bên trong chỉ có nội dung và sẽ kéo dài đến nội dung.

Sau đó, bạn có thể so sánh chiều cao và chiều rộng của 2 Div, mà không cần phải tự động thêm bất kỳ thứ gì.

<div id="tempDiv" class="rounded"> 
    <div class="content"> 
     Lorem ipsum dolor sit amet, 
     consectetur  adipiscing elit. Phasellus vel quam vestibulum orci blandit laoreet. 
    </div> 
</div> 
Các vấn đề liên quan