Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.01.2013, 12:13
Интересующийся
Отправить личное сообщение для Sober_exe Посмотреть профиль Найти все сообщения от Sober_exe
 
Регистрация: 27.02.2012
Сообщений: 18

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

Пример: Есть пункт меню "Оборудование 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, скажите, можно ли изящнее написать данный код

Последний раз редактировалось Sober_exe, 15.01.2013 в 12:59.
Ответить с цитированием
  #2 (permalink)  
Старый 15.01.2013, 12:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Sober_exe,
var str = "длинное, по пробелу и почистить от предлога ";
str = str.replace(/^(.{0,18}\S{3})(.*?)$/,"$1") ;
alert(str+"\n"+str.length)
Ответить с цитированием
  #3 (permalink)  
Старый 15.01.2013, 12:54
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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

Последний раз редактировалось Deff, 15.01.2013 в 12:56.
Ответить с цитированием
  #4 (permalink)  
Старый 15.01.2013, 12:58
Интересующийся
Отправить личное сообщение для Sober_exe Посмотреть профиль Найти все сообщения от Sober_exe
 
Регистрация: 27.02.2012
Сообщений: 18

Спасибо. К сожалению, я пока с регулярками не разобрался. Надо понять, что у вас написано.
Ответить с цитированием
  #5 (permalink)  
Старый 15.01.2013, 13:03
Новичок на форуме
Отправить личное сообщение для Островитянин Посмотреть профиль Найти все сообщения от Островитянин
 
Регистрация: 15.01.2013
Сообщений: 2

Есть мнение, что топик-стартер, жёсткий клоун.
Учите матчасть.
Ответить с цитированием
  #6 (permalink)  
Старый 15.01.2013, 13:17
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,225

Сообщение от Sober_exe
обрезать название пункта меню
Как вариант просто использовать это
http://htmlbook.ru/css/text-overflow

Но там анализа нет никакого...
Ответить с цитированием
  #7 (permalink)  
Старый 15.01.2013, 14:41
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

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

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

рони, правильно сделал, т.к.: и, по, с, в ...
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #8 (permalink)  
Старый 15.01.2013, 16:16
Интересующийся
Отправить личное сообщение для Sober_exe Посмотреть профиль Найти все сообщения от Sober_exe
 
Регистрация: 27.02.2012
Сообщений: 18

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открыть слайд (раздел) текущего пункта меню Demath Элементы интерфейса 8 18.07.2012 02:49
Проблема с аккордионом и меню Tie ExtJS 3 01.09.2011 14:36
Как в общем меню для всех страниц поменять класс определенного пункта в зависимости о phenom Элементы интерфейса 2 08.04.2011 11:09
Событие onClick при нажатии пункта меню Lex4e Общие вопросы Javascript 1 25.06.2010 18:31
Блок переключения меню на JS, два скрипта в одном файле Dizeloid Элементы интерфейса 0 30.07.2009 12:03