Я хотел бы сократить очень длинные описания до доступной ширины столбца таблицы. У меня есть информация о ширине столбца в пикселях. Теперь я хотел бы преобразовать эту меру в количество символов, чтобы можно было сократить текст до указанного числа.
Я не должен быть на 100% прав, близкое предположение также будет работать.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это для Интернета? Если да, то почему бы не использовать более простой метод, например использование css, чтобы скрыть переполнение?
Оберните текст в ячейку в DIV. Это скажет вам, больше ли текст внутри DIV, чем ячейка:
<div id='test' style='width:200px;height:100px;overflow:hidden'>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse at felis. Etiam ullamcorper. Aenean fringilla, eros eu dapibus tristique, erat lacus vestibulum metus, nec pharetra leo ante et quam. Nunc ac mi molestie justo placerat laoreet. Morbi eget dolor. Curabitur pretium, mi quis iaculis molestie, dolor ligula sagittis orci, at sodales quam dolor quis sem. Suspendisse vitae risus. Maecenas vestibulum dolor vel augue. Sed purus. Ut nisi massa, vestibulum id, lobortis eget, aliquet eu, enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos.</p>
</div>
<script type = "text/javascript">
alert($('test').scrollHeight)
</script>
Если вы хотите усечь в конце слова и добавить многоточие (...), вы можете в сценарии начать удаление слов до тех пор, пока высота не станет равной или меньше высоты контейнера. (Я использую Прототип для ярлыка $)
Вот рабочий пример:
<div id='test' style='width:300px;height:100px;overflow:hidden'>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse at felis. Etiam ullamcorper. Aenean fringilla, eros eu dapibus tristique, erat lacus vestibulum metus, nec pharetra leo ante et quam. Nunc ac mi molestie justo placerat laoreet. Morbi eget dolor. Curabitur pretium, mi quis iaculis molestie, dolor ligula sagittis orci, at sodales quam dolor quis sem. Suspendisse vitae risus. Maecenas vestibulum dolor vel augue. Sed purus. Ut nisi massa, vestibulum id, lobortis eget, aliquet eu, enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos.
</div>
<script type = "text/javascript">
function shorten(element) {
if ($(element).scrollHeight>$(element).getHeight()) {
var myText = $(element).innerHTML.split(" ")
myText.length=myText.length-2
$(element).update(myText.join(" ")+" ...")
window.setTimeout('shorten("'+element+'")',1)
}
}
shorten('test')
</script>
Вы можете разделить предложения на точку, а не на пробел, но вам потребуется откат, если точка не найдена или если то, что осталось после усечения, слишком короткое.
Мне очень нравится этот ответ. (В вашем примере кода отсутствует закрывающий тег скрипта.)
Обязательно попробую, не совсем уверен, как это будет выглядеть, например, в java-коде "GWT" для элемента метки.
Да уж. Это должно произойти на клиенте после рендеринга страницы, поэтому я не уверен, как будет выглядеть серверный код.
Сервер обычно не знает, в каком размере браузер будет отображать текст, поскольку это зависит от шрифтов браузера и настроек пользователя.
Я использую jquery 1.4.2, и предыдущий ответ не решил проблему, но помог .. вот код с небольшими изменениями. помните, что контейнер должен иметь фиксированную высоту, а перелив должен быть скрыт.
p#descr1 { height:46px; overflow:hidden; }
<script type = "text/javascript">
function shorten(element) {
if ($(element).attr('scrollHeight') > $(element).height()) {
var myText = $(element).text().split(" ")
myText.length = myText.length - 2
$(element).html(myText.join(" ") + " ...")
window.setTimeout('shorten("' + element + '")', 1)
}
}
$(document).ready(function () {
shorten('#descr1'); // the id of the container
});
</script>
Свойство CSS, о котором он говорит, - «переполнение текста».
Попробуйте добавить к классу вашего элемента следующее: все это необходимо:
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
Цель состоит в том, чтобы сократить текст, чтобы последние слова все еще были видны. Для instace: очень-очень-очень-очень длинный текст -> очень ... длинный текст. Если это можно сделать с помощью CSS, предоставьте информацию.