Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Как сделать перенос слов?


Автор: Sukhof 29.12.2004, 10:44
Подскажите плз, как можно организовать перенос слов скажем вот так

сло-
во

и чтобы это автоматом происходило, т.е. слово не входит в ширину поля, то оно автоматом переносится.

Автор: Sardar 29.12.2004, 14:55
На JS этото делать не нужно, браузер сам разобьёт текст. Правда слова делить он не будет, т.к. это не красиво. Если нужно поделить именно слова, то узнаём какой именно размер нам нужен, затем с большим шагом выбираем подстроку, оборачиваем её в span, узнаём размеры. Если строка малеьнкая, то следущий шаг, иначе пол шага назад. Код простой, только не пойму как это может понадобится, когда браузер делает всю рутину за тебя smile

А еще в PHP(уверен что пишешь на нём) есть полезная функция: string wordwrap ( string str [, int width [, string break [, bool cut]]]

Автор: mix 29.12.2004, 20:11
Sardar
Символ переноса тогда не появиться

Нужно буквы разделить ­

с­л­о­в­о

Автор: Sardar 29.12.2004, 21:24
mix, а он тебе нужен? Это же не красиво, обьясни задачу подробнее, может смогу убедить что ты зря теряешь время smile
Если нет, то будем парится с кодом smile

Автор: Sukhof 30.12.2004, 07:09
Вообщем задача такая, php получает суммированные значения из бд, вставляет их в html таблицу. Вы когда-нибудь видели формы статистической отчетности, там такие таблицы smile дуба дать можно, пишу сетевую прогу, которая выводит эти таблицы, сводные статистические отчеты. Сам стат комитет поставляет эти таблицы, которые на а4 по вертикале не влазит их разбивают, название полей с кучей переносов, даже некоторые не по правилам русского языка, бывает такие переносы:

ав-
ар-
ий-
ны-
х.

естестно и у меня ничего не влазит при печати хоть как располагать лист (устанавливать альбомный или книжный), поэтому и нужны переносы. Ладно бы была одна таблица так вручную бы проставил переносы, так нет же мне надо сделать 16 стат форм, каждая из которых содержит до 20-25 таких таблиц


Автор: Sardar 30.12.2004, 22:22
Под праздники думать особо не хочется, вот наваял нечто страшное:
Код
/**
* Функция разбивает текст по строкам. Аргументом передается тег и запрашиваемая ширина.
* Тег не должен содержать разметку и переводы строки.
* Возвращает реальную ширину элемента, обычно она чуть шире чем запрашиваемая.
*/
function simpleSpliter(elem, width) {
 if(!elem||width<1) throw "Illegal argument exception";
 var txt=(typeof(elem.innerText)!="undefined")? elem.innerText: elem.textContent;
 elem.innerText=""; //убираем всё содержимое
 var maxWdth=0;
 for(var pt=0, el, i; pt<txt.length; pt=i) {
   el=document.createElement("SPAN"); //следующая строка
   elem.appendChild(el); //рендерим
   for(i=pt; i<txt.length&&el.offsetWidth<width; i++) el.innerHTML=txt.substring(pt, i+1);
   if(i<txt.length) {
        if(i-pt>1&&txt.charCodeAt(i-1)>32) el.innerHTML=txt.substring(pt, --i)+"-";
        el.innerHTML+="<br>";
   }
   if(el.offsetWidth>maxWdth) maxWdth=el.offsetWidth;
 }
 return maxWdth;
}


Пример работы:
HTML
<div id="test">Это длинный текст который не может содержать символы перевода строки, а также теги, ибо код разбивающий его очень примитывный.</div>
<script language="Javascript" type="text/javascript">
<!--
//разбить по ширине в 40 пикселов
alert("Max width: "+simpleSpliter(document.getElementById("test"), 40));
//-->
</script>


Передать можешь сразу ячейки таблицы.

Автор: Opik 3.1.2005, 22:56
А не проще:
Код

<p align="justify">текст</p>

? и надобность в переносах отмадет...

Цитата
Sardar
Символ переноса тогда не появиться

смотря какой разделитель поставить...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)