Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
 Аватар для Sanu0074
59 / 59 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5

Обернуть тегами выделенный фрагмент текста

09.04.2014, 17:33. Показов 4910. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такой блок:
HTML5
1
2
3
  <div class="editor-content" id="editor-content" contenteditable="true">
    as dd sad as
  </div>
кусок плагина в котором проверяю выделение:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
            getSel = function(element) {
                var start = 0, end = 0;
                var sel, range, priorRange;
                if (typeof window.getSelection != "undefined") {
                    range = window.getSelection().getRangeAt(0);
                    priorRange = range.cloneRange();
                    priorRange.selectNodeContents(element);
                    priorRange.setEnd(range.startContainer, range.startOffset);
                    start = priorRange.toString().length;
                    end = start + range.toString().length;
                } else if (typeof document.selection != "undefined" &&
                        (sel = document.selection).type != "Control") {
                    range = sel.createRange();
                    priorRange = document.body.createTextRange();
                    priorRange.moveToElementText(element);
                    priorRange.setEndPoint("EndToStart", range);
                    start = priorRange.text.length;
                    end = start + range.text.length;
                }
                return {
                    start: start,
                    end: end
                };
            },
        
            alertSelection = function() {
                var mainDiv = document.getElementById(sett.id);
                var sel = getSel(mainDiv);
                var val = editor.html();
                var text = val.substr(0,sel.start) + "[abcd]" + val.substr(sel.start,sel.end) + "[/abcd]" + val.substr(sel.end,val.length);
                
                alert(text);
            }
при выделении символов "dd", alert выводит следующее: "as [abcd]dd sad as[/abcd] sad as"
хотя по логике должно вывести это: "as [abcd]dd[/abcd] sad as"

проверял что возвращает функция getSel(), все правильно работает...

непойму почему так...
помогите разобраться.

и желательно пример где подобная задача решается, именно такая... много перегуглил уже
зараннее спасибо)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.04.2014, 17:33
Ответы с готовыми решениями:

Обрамление выделенного текста тегами - не работает в IE
Здравствуйте. Есть следующий плагин для jQuery: (function($) { $.fn.wrapSelected = function(open, close) { return...

Фрагмент текста в массив
Написать функцию, которая превращает фрагмент текста в массив, элементами которого являются предложения. Помогите, пож.

На каждый выделенный фрагмент текста сделать закладки
Добрый день, передо мной стоит следующая задача vba в ms word 2003. Есть несколько выделенных фрагментов текста (Ctrl) и необходимо на...

7
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
09.04.2014, 18:23
Цитата Сообщение от Sanu0074 Посмотреть сообщение
желательно пример где подобная задача решается
таких задач никто не решает
вы, похоже, единственный на всём белом свете

contenteditable="true" прописывается для того, чтобы оперировать реальными тегами (т.е. начинающимися с < и заканчивающимися >)
вы же зачем-то установили contenteditable="true", но работаете с BB-кодами

таковым маразмом, уверен, никто в мире не занимался, не занимается, и не будет заниматься
0
 Аватар для Sanu0074
59 / 59 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5
09.04.2014, 22:45  [ТС]
Цитата Сообщение от kalabuni Посмотреть сообщение
таковым маразмом, уверен, никто в мире не занимался, не занимается, и не будет заниматься
это для примера я показываю, то что BB ненужен всем ясно. важен сам принцип работы. Есть решения?
если нет, то нечего срачи свои лепить в тему господин тролль)

Добавлено через 3 часа 16 минут
тупанул жестко с синтаксисом(

я вот сделал щас так, работает, выделят как надо:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
        var editor = this,
        
            getSel = function(element) {
                var start = 0, end = 0;
                var sel, range, priorRange;
                if (typeof window.getSelection != "undefined") {
                    range = window.getSelection().getRangeAt(0);
                    priorRange = range.cloneRange();
                    priorRange.selectNodeContents(element);
                    priorRange.setEnd(range.startContainer, range.startOffset);
                    start = priorRange.toString().length;
                    end = start + range.toString().length;
                } else if (typeof document.selection != "undefined" &&
                        (sel = document.selection).type != "Control") {
                    range = sel.createRange();
                    priorRange = document.body.createTextRange();
                    priorRange.moveToElementText(element);
                    priorRange.setEndPoint("EndToStart", range);
                    start = priorRange.text.length;
                    end = start + range.text.length;
                }
                return {
                    start: start,
                    end: end
                };
            },
            
            stripTags = function(text){
                if(text.length<3){return;}
                var regex = /(<([^>]+)>)/ig;
                return text.replace(regex, "");
            },
        
            setTag = function(tag) {
                var mainDiv = document.getElementById(sett.id),
                    sel = getSel(mainDiv),
                    val = editor.html(),
                    fragment = stripTags(val.substr(sel.start, (sel.end-sel.start)));
                    
                    text = val.substr(0, sel.start) + "<"+tag+">" + fragment + "</"+tag+">" + val.substr(sel.end);
                
                editor.html(text);
            }
 
 
 
        editor.bind('keydown','ctrl+b',function(){
           setTag("strong");
           return false;
        });
Теперь как правильно сделать, чтоб когда уже обрамленный текст (в данном случае жирный) выделяеш, нажимаеш ctrl+b, и он теряет выделение (в данном случае теги strong по краям должны пропасть)....
Как правильно сделать?
В этом примере при обратном выделении вставляется такое: "as dd g>sad as"
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
09.04.2014, 22:57
вам знакомы execCommand () или вы всё же предпочитаете изобрести свой собственный велосипед?

порекомендую посмотреть
1
 Аватар для Sanu0074
59 / 59 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5
09.04.2014, 22:59  [ТС]
kalabuni, да знакомы)
хочется вилик сделать, поэтому интерисуюсь)
0
2 / 3 / 3
Регистрация: 02.11.2010
Сообщений: 129
25.11.2014, 15:28
Подскажите, как привязать срабатывание кода приведенного в 3 сообщении к щелчку по кнопке или div, т.е. при ctrl+b -> работает отлично, пытался повесить по аналогии
HTML5
1
<div onclick="setTag('strong');">Try</div>
Обвел текст, проверил комбинацией клавиш - есть результат, нажал на "Try" - не срабатывает. В чем может быть причина?
0
 Аватар для Sanu0074
59 / 59 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5
25.11.2014, 15:52  [ТС]
vinternete, юзайте jquery.hotkeys
0
2 / 3 / 3
Регистрация: 02.11.2010
Сообщений: 129
25.11.2014, 17:32
Я не правильно выразился, мне нужно, чтобы пользователь мог выделить код и нажав на кнопку <button id="id"> или <div id="id"> добавить теги, то есть отслеживание нажатий клавиш и комбинаций ненужно. Проблема в том, что опыта у меня с js 2 дня, а сделать это "надо было еще вчера", поэтому я не понимаю причины, почему при
JavaScript
1
2
3
4
editor.bind('keydown','ctrl+b',function(){
           setTag("strong");
           return false;
        });
срабатывает, а при:
JavaScript
1
<div onclick="setTag('strong');">Try</div>
не срабатывает, именно в данном коде (3 сообщение).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.11.2014, 17:32
Помогаю со студенческими работами здесь

Прочитать выделенный фрагмент текста из ячейки Datagrid
Собственно, вопрос в заголовке. В ячейке датагрида содержится текст &quot;Привет мартышке!&quot;. Пользователь выделяет фрагмент...

Как сделать выделенный фрагмент текста заглавными буквами и наоборот
вчера мне задали вопрос относительно редактирования текста в Ворде - Как сделать выделенный фрагмент текста заглавными буквами и наоборот?...

Получить выделенный фрагмент
Доброго времени суток. ВОпрос такой, не знаю как реализовать такую вещь: Допустим юзер выделяет что-то где-то например кусок текста в том...

Необходимо выделенный фрагмент HTMLки скопировать в буфер (на клиенте)
Не нашел на РЕЛИБЕ форума по DHTML, поэтому задаю вопрос сюда... ВОПРОС: необходимо выделенный фрагмент HTMLки скопировать в буфер...

Что в этой программе значит выделенный фрагмент? Обьясните подробно
program Ess; uses crt; const n = 5; m = 5; var i,j,k: integer; a: array of integer; begin randomize; for i:=1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru