Javascript.RU

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

Select, range как работать с ними?
День добрый! Приведу сразу свой код.

function optionStyleText(style, tag) {

    selText = document.getSelection();
    anchorOffset = selText.anchorOffset;
    focusOffset = selText.focusOffset;
    node = document.getSelection();
    textSel = document.getSelection().toString();

     const tagDecorText = document.createElement(tag);
          tagDecorText.setAttribute('class', style);

        let range = new Range(); //создаю диапазон
                range.setStart(textNode.firstChild, anchorOffset);
                range.setEnd(textNode.lastChild, focusOffset);

                content = range.extractContents();
                tagDecorText.innerHTML = textSel;
                range.deleteContents(); 
                range.insertNode(tagDecorText);
               
                document.getSelection().removeAllRanges();
                document.getSelection().addRange(range);
}


если передаю тег b и класс то все устанавливается. Текст выделенный становится жирным и присваивается класс. А как обработать снятие? На мысль приходит одно нужно условие проверки, обернут текст или нет в какой-либо тэг? Подскажите направление хоть куда копать? п.с. и можете объяснить принцип работы getAtRange, а то не догоняю слегка его
Ответить с цитированием
  #2 (permalink)  
Старый 27.02.2023, 13:30
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

выделение обернуть в тег и удаление
allonemoon,
выделить текст, затем кликнуть по красному для снятия выделения.
<!DOCTYPE HTML>
<html>

<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <style type="text/css">
        .red {
            background-color: #FF0000;
        }
    </style>
</head>

<body>
    <p id="p">Выдели меня: <i>курсив</i> и <b>жирный</b></p>
    <script>
        function optionStyleText(style, tag) {

            let range = window.getSelection().getRangeAt(0);
            let selectionContents = range.extractContents();
            if (!selectionContents.textContent) return;
            let elem = document.createElement(tag);
            elem.appendChild(selectionContents);
            elem.classList.add(style);
            range.insertNode(elem);
        }

        document.querySelector('#p').addEventListener('mouseup', function() {
            optionStyleText('red', 'b')
        })
        document.querySelector('#p').addEventListener('click', function({ target }) {
            if (target = target.closest('b.red')) target.replaceWith(...target.childNodes);
        })
    </script>
</body>

</html>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как удалить из Select все имеющиеся option finlolo Элементы интерфейса 4 14.11.2018 10:04
Как сделать простой select? drkrol jQuery 1 29.01.2017 14:48
Как отфильтровать таблицу по select? miusov jQuery 1 16.09.2016 11:50
Подскажите как привязать Select к скрипту. Sempai Ваши сайты и скрипты 12 05.09.2014 05:16
jQuery UI Range slider как заблокировать левый ползунок по первому клику Oleg_Pupkin jQuery 3 04.09.2013 13:44