2011-08-21 20 views
34

Jak wykryć przepełnienie tekstu pionowego w elemencie div?Jak wykryć przepełnienie elementu 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

Co rozumiesz przez "wykrywanie" dokładnie? Co chcesz zrobić w reakcji, pokazać pasek przewijania? –

+0

Chcę zmienić rozmiar div na zawisie myszy, jeśli tekst się przepełnił, ale już to posortowałem, aby nie było częścią pytania. –

+0

Podobne stare pytanie z doskonałą odpowiedzią: https://stackoverflow.com/a/143889/573057 – earcam

Odpowiedz

45

Można easil y zrobić poprzez porównanie scrollHeight z clientHeight, spróbuj wykonać następujące czynności:

<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> 

Aby uzyskać więcej informacji prosimy zapoznać się z: http://help.dottoro.com/ljbixkkn.php

+0

To nie działa, jeśli reguła przepełnienia div jest "widoczna", która jest domyślna. Korzystanie z przeglądarki Firefox 18. – Ryan

+0

Nie zawiera informacji o przepełnieniu konkretnego elementu div. – NoBugs

+0

Problem z tym rozwiązaniem polega na tym, że jeśli element jest ukryty (lub jego rodzic), oba zwracają 0 .. każde obejście? –

5

następujące jQuery plugin będzie ostrzegać wynik.

CSS

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

Aby ustalić przepełnienia szerokości,

(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); 

Aby ustalić przelew w wysokości

(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

Nie jesteś pewien, czy jest to najbardziej efektywny lub najlepszy sposób sprawdzenia - co jeśli w tym konkretnym elem znajduje się skrypt, zostanie on ponownie uruchomiony it – NoBugs

2

wariacja na odpowiedź Chamika jest, aby w swojej rzeczywistej html, mają wewnętrzną i zewnętrzna Div. Zewnętrzny Div miałby ukrytą statyczną wysokość i szerokość oraz przelew. Wewnętrzny Div ma tylko treść i rozciągnie się do treści.

Następnie można porównać wysokość i szerokość 2 elementów DIV, bez konieczności dynamicznego dodawania czegokolwiek.

<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> 
Powiązane problemy