Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.06.2015, 19:06
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

Последовательное Замкнутое Переключение Регистра Выделенного Пользователем Текста
ЦЕЛЬ: Последовательное замкнутое переключение регистра выделенного пользователем текста клавишами ВВЕРХ, ВНИЗ.

1) Например, есть текст:

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

2) Выделяем мышкой: смесь двух изотопов
3) Нажимаем клавишу ВВЕРХ:
Первое нажатие -> Смесь двух изотопов
Второе нажатие -> СМЕСЬ ДВУХ ИЗОТОПОВ
Третье нажатие -> смесь двух изотопов
и тд ... -> замкнутое переключение. При этом само выделение не должно сниматься во время переключений!
4) Если же нажимать клавишу ВНИЗ, то смена регистра будет происходить в обратном порядке: ВЕРХНИЙ РЕГИСТР -> Как в предложениях -> нижний регистр ->...

Я пробовал изменить регистр выделения клавишей Enter, но не получилось:
document.onkeyup = function (e) {
    if (e.keyCode == 13) {
        var selection = window.getSelection()
        if (selection.style.textTransform = 'inherit') {
        selection.style.textTransform = 'uppercase';
        }
        else {
        selection.style.textTransform = 'inherit';
        }
    return false;
    }
}


Надеюсь на Вашу помощь, уважаемые программисты!

Последний раз редактировалось Teamur, 29.06.2015 в 19:28.
Ответить с цитированием
  #2 (permalink)  
Старый 30.06.2015, 19:20
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

Где же вы где?
Ответить с цитированием
  #3 (permalink)  
Старый 30.06.2015, 20:12
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,577

Это напряжно.)
__________________
29375, 35
Ответить с цитированием
  #4 (permalink)  
Старый 30.06.2015, 21:04
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

Это вопрос или заказ?
Ответить с цитированием
  #5 (permalink)  
Старый 30.06.2015, 22:04
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

<!DOCTYPE html>
<html>
  <body>
    <div id="inset">Установлено, что смесь двух изотопов, дейтерия и трития, требует меньше энергии для реакции синтеза по сравнению с энергией, выделяемой во время реакции.</div>
  <script>
    
  String.prototype.capitalize = function () {
    return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
  }
  
  Math.mod = function(a, b) {
    return (b + (a % b)) % b;
  };
  
  (function() {
    var actions = ['toUpperCase', 'capitalize', 'toLowerCase'];
    var selection = window.getSelection();
    actions.currentIndex = -1;
    actions.key = { 38: 'prev', 40: 'next' };
    actions.next = function() {
      return actions[actions.currentIndex = Math.mod(++actions.currentIndex, actions.length)];
    };
    actions.prev = function() {
      return actions[actions.currentIndex = Math.mod(--actions.currentIndex, actions.length)];
    };
    document.addEventListener('selectstart', function(event) {
      actions.currentIndex = -1;
      // var selection = window.getSelection();
      return false;
    });
    document.addEventListener('keyup', function(event) {
      event.preventDefault();
      if(!selection) return;
      switch(event.keyCode) {
        case 38: case 40:
        var string = selection.toString();
        if (selection.rangeCount) {
          var range = selection.getRangeAt(0);
          range.deleteContents();
          range.insertNode(document.createTextNode(string[actions[actions.key[event.keyCode]]()]()));
          selection.addRange(range);
        }
      }
      return false;
    });
  })();
    </script>
  </body>
</html>

Последний раз редактировалось Malleys, 30.06.2015 в 22:32. Причина: Убрал 28 строку
Ответить с цитированием
  #6 (permalink)  
Старый 30.06.2015, 22:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Malleys,
строка 28 зачем?
Ответить с цитированием
  #7 (permalink)  
Старый 30.06.2015, 22:31
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от рони
строка 28 зачем?
На самом деле не нужна. selection уже определено в 17 строке.
Ответить с цитированием
  #8 (permalink)  
Старый 30.06.2015, 22:42
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

Ну вы даёте, мужики! Мастера!
Какие еще будут предложения? Можно ли этот скрипт минимизировать?
Ответить с цитированием
  #9 (permalink)  
Старый 30.06.2015, 22:56
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

на всякий случай скрипт выше разрушает html
Ответить с цитированием
  #10 (permalink)  
Старый 30.06.2015, 22:58
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от рони
разрушает html
Если изменения затрагивают какой-то один элемент, то после того как снято выделение можно сделать
inset.innerHTML = inset.innerHTML
Текст опять как одна textNode, но ещё зачем-то 58 пустых

Последний раз редактировалось Malleys, 30.06.2015 в 23:19.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить координаты области выделенного текста oleg.oreshenko Общие вопросы Javascript 0 06.12.2013 11:15
Вывод выделенного текста в форме другого окна Mrjoey Events/DOM/Window 10 22.06.2011 22:31
букмарклет для передачи в $.post выделенного фрагмента текста dimiork AJAX и COMET 2 30.03.2011 13:08
получение выделенного текста ASerputko Общие вопросы Javascript 2 13.01.2011 09:57
позиция выделенного текста в textarea, начало/конец `p r o x y jQuery 3 07.05.2009 09:08