Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   [Range] surroundContents (https://javascript.ru/forum/events/49779-%5Brange%5D-surroundcontents.html)

brizz 28.08.2014 01:38

[Range] surroundContents
 
Проблема в следующем.

К примеру, выделяю слово и оборачиваю его тегом.



Получаю



Выделяю



Получаю



Выделяю



Ничего не получаю



Как лечить?:help:

Код:
//rng объект Range
rng.surroundContents(document.createElement("b"));

Aetae 28.08.2014 01:45

Попробуй span. И не плохо бы полный код примера.

brizz 28.08.2014 01:47

Цитата:

Сообщение от Aetae (Сообщение 327820)
Попробуй span. И не плохо бы полный код примера.

Тоже самое...

brizz 28.08.2014 01:54

Цитата:

И не плохо бы полный код примера
<iframe src="text.html" frameborder="3"></iframe>
<span id='magic'>Magic</span>

Содержимое text.html
<div contenteditable="true">Текст текст и еще текст</div>

Ну сам скрипт
document.getElementById('magic').onclick = getAndEdit;
  function getAndEdit(){
  	var rng = window.frames[0].document.getSelection().getRangeAt(0);
	rng.surroundContents(document.createElement("span"));
	}

ixth 28.08.2014 02:01

А попробуй сделать rng.setStartBefore(rng.startContainer) и rng.setEndAfter(rng.endContainer). Может, у тебя рейндж не всю ноду выделяет?

Aetae 28.08.2014 02:27

Смотрите в консоль:
Uncaught InvalidStateError: Failed to execute 'surroundContents' on 'Range': The Range has partially selected a non-Text node.
И не спрашивайте меня какого хъ он не может сам определить как ему сделать surroundContents в таком случае, а кидает ошбку. Все проклятья - в адрес разработчиков стандарта.=\

Octane 28.08.2014 10:21

В давние неспокойные времена оборачивание в теги в WYSIWYG редакторах делали следующим образом:
document.execCommand('fontName', false, 'fake')

потом заменяли все <font name="fake"> на нужный тег


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