Значение по умолчанию для свойства CSS line-height : normal .Эта строка:
var lineHeight = this.css("line-height"); // returns "Xpx"
На самом деле возвращает "normal"
, который ваш код затем пытается разобрать в целое число, что приводит к NaN
.
http://www.w3.org/TR/CSS2/visudet.html#propdef-line-height
Кроме того, как уже упоминали другие, ваш цикл удаляет 1 символ и добавляет еще 8, поэтому он никогда не станет короче.Вы должны добавить …
после окончания цикла, и ваша строка будет достаточно короткой:
while (this.lineCount() > countAfterTruncation) {
this.html(this.html().slice(0, -1));
}
this.html(this.html()+"…");
В качестве отступления я считаю необходимым добавить несколько указателей для вашего кода:
- Как я уже упоминал в комментариях, вам не нужно отрывать px при разборе строки типа "12px" с помощью parseInt () .
- Не используйте ключевое слово var внутри цикла, это приводит к повторной инициализации переменной на каждой итерации, что, помимо плохой практики, приведет к ошибке в строгом режиме ECMAScript 5.
- Вы можетеиспользуйте метод slice () с отрицательным смещением для второго параметра вместо использования substring () и длины передаваемой строки - 1.
- вместо
document.getElementById(this.attr("id"))
, вы можете просто использовать this.get(0)
. this уже является элементом, обернутым jQuery, вы можете получить доступ к базовому элементу, используя метод get () . - Если вы можете помочь, не манипулируйте html () / innerHTML внутри циклов.Производительность очень низкая, так как он вызывает анализатор HTML на каждой итерации цикла.