กาลครั้งหนึ่งฉันต้องทำสิ่งนี้และทางออกที่เชื่อถือได้ข้ามเบราว์เซอร์เดียวที่ฉันเจอคืองานแฮ็ค ฉันไม่ใช่แฟนตัวยงของการแก้ปัญหาแบบนี้ แต่มันให้ผลลัพธ์ที่ถูกต้องครั้งแล้วครั้งเล่า
แนวคิดคือคุณโคลนองค์ประกอบลบความกว้างของขอบเขตและทดสอบว่าองค์ประกอบที่โคลนนั้นกว้างกว่าต้นฉบับหรือไม่ ถ้าเป็นเช่นนั้นคุณรู้ว่ามันจะถูกตัดทอน
ตัวอย่างเช่นการใช้ jQuery:
var $element = $('#element-to-test');
var $c = $element
.clone()
.css({display: 'inline', width: 'auto', visibility: 'hidden'})
.appendTo('body');
if( $c.width() > $element.width() ) {
// text was truncated.
// do what you need to do
}
$c.remove();
ฉันสร้าง jsFiddle เพื่อแสดงสิ่งนี้http://jsfiddle.net/cgzW8/2/
คุณสามารถสร้าง pseudo-selector ที่คุณกำหนดเองสำหรับ jQuery:
$.expr[':'].truncated = function(obj) {
var $this = $(obj);
var $c = $this
.clone()
.css({display: 'inline', width: 'auto', visibility: 'hidden'})
.appendTo('body');
var c_width = $c.width();
$c.remove();
if ( c_width > $this.width() )
return true;
else
return false;
};
จากนั้นใช้เพื่อค้นหาองค์ประกอบ
$truncated_elements = $('.my-selector:truncated');
การสาธิต: http://jsfiddle.net/cgzW8/293/
หวังว่านี่จะช่วยได้แฮ็คอย่างที่มันเป็น