Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Обрезка имя пункта меню. рефакторинг скрипта (https://javascript.ru/forum/project/34692-obrezka-imya-punkta-menyu-refaktoring-skripta.html)

Sober_exe 15.01.2013 12:13

Обрезка имя пункта меню. рефакторинг скрипта
 
Добрый день.
Была задача - обрезать название пункта меню, если длинное, по пробелу (т.е. не обрубить слово по середине) и почистить от союза "и".

Пример: Есть пункт меню "Оборудование Wi-Fi и Bluetooth" - оно длинное для дизайна меню, нужно что бы вывелось часть названия, так "Оборудование Wi-Fi", а не так "Оборудование Wi-Fi и Blueto" к примеру (overflow: hidden; не подходит по тем же причинам).

Написал следующее:
var str, newStr, cropIndex;

        $('li').each(function (){
            str = $(this).text(); //берём название пункта меню
            if(str.length > 21){ //проверяем длину
                str = str.slice(0, 21) // берём допустимую часть
                cropIndex = str.lastIndexOf(' '); // определяем индекс пробела с конца строки
                newStr = str.slice(0, cropIndex); // обрезаем до пробела
                cropIndex = newStr.lastIndexOf(' и'); // аналагично проделываем с "и"
                newStr = str.slice(0, cropIndex);
                $(this).text(newStr); //записываем новую строчку
            }
        });


Знатоки JS, скажите, можно ли изящнее написать данный код

рони 15.01.2013 12:49

Sober_exe,
var str = "длинное, по пробелу и почистить от предлога ";
str = str.replace(/^(.{0,18}\S{3})(.*?)$/,"$1") ;
alert(str+"\n"+str.length)

Deff 15.01.2013 12:54

:) Ващет "и" это союз. Я б .split(/\s/) разбил по словам...

Sober_exe 15.01.2013 12:58

Спасибо. К сожалению, я пока с регулярками не разобрался. Надо понять, что у вас написано.

Островитянин 15.01.2013 13:03

Есть мнение, что топик-стартер, жёсткий клоун.
Учите матчасть.

ksa 15.01.2013 13:17

Цитата:

Сообщение от Sober_exe
обрезать название пункта меню

Как вариант просто использовать это
http://htmlbook.ru/css/text-overflow

Но там анализа нет никакого...

nerv_ 15.01.2013 14:41

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

Я бы исходил из требуемой длинны, а уже после вся эта акробатика.

рони, правильно сделал, т.к.: и, по, с, в ...

Sober_exe 15.01.2013 16:16

Цитата:

Сообщение от nerv_ (Сообщение 227363)
разные буквы занимают разное кол-во места, если шрифт не моноширинный. К тому же, буквы подразделяются на прописные и строчные.

Я бы исходил из требуемой длинны, а уже после вся эта акробатика.

Да, вы правы, по поводу ширины, в начале я про это подумал, но почему то ушёл от этой мысли. Сейчас изменю. Спасибо


Часовой пояс GMT +3, время: 21:53.