Сократить длинный текст по ширине в пикселях

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

Я не должен быть на 100% прав, близкое предположение также будет работать.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
2 273
4

Ответы 4

Это для Интернета? Если да, то почему бы не использовать более простой метод, например использование css, чтобы скрыть переполнение?

Цель состоит в том, чтобы сократить текст, чтобы последние слова все еще были видны. Для instace: очень-очень-очень-очень длинный текст -> очень ... длинный текст. Если это можно сделать с помощью CSS, предоставьте информацию.

Drejc 05.12.2008 23:45

Оберните текст в ячейку в 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>

Вы можете разделить предложения на точку, а не на пробел, но вам потребуется откат, если точка не найдена или если то, что осталось после усечения, слишком короткое.

Мне очень нравится этот ответ. (В вашем примере кода отсутствует закрывающий тег скрипта.)

Benry 06.12.2008 01:05

Обязательно попробую, не совсем уверен, как это будет выглядеть, например, в java-коде "GWT" для элемента метки.

Drejc 06.12.2008 01:36

Да уж. Это должно произойти на клиенте после рендеринга страницы, поэтому я не уверен, как будет выглядеть серверный код.

Diodeus - James MacFarlane 06.12.2008 01:47

Сервер обычно не знает, в каком размере браузер будет отображать текст, поскольку это зависит от шрифтов браузера и настроек пользователя.

some 06.12.2008 05:05

Я использую 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;

Другие вопросы по теме