Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Позиционирование курсора в DesignMode (https://javascript.ru/forum/events/7064-pozicionirovanie-kursora-v-designmode.html)

da_ff 13.01.2010 11:58

Позиционирование курсора в DesignMode
 
Здраствуйте. Учень нужна помощь. При вставке в документ с заданым designmode картинки курсор оказывается слева от нее, что разумеется не кошерно. Вопрос, это я как то не так вставляю картинку или это требует дополнительных манипуляций?

if (browse.ie) {
  var imgId = uniqueId('smile');
  var el =
    '<img id="' + imgId + '" src="' + smile.img + '" alt="' + smile.txts[0] +
    '" contentEditable="false" onResizeStart="return false">';
  maDocument.selection.createRange().pasteHTML(el);
} else {
  var el = maDocument.createElement('img');
  el.src = smile.img;
  el.alt = smile.txts[0];
  SelectionRange = maWindow.getSelection().getRangeAt(0);
  SelectionRange.deleteContents();
  SelectionRange.insertNode(el);
}

da_ff 13.01.2010 12:15

Так.. Для gecko подобных браузеров проблема решается добавлением нескольких строчек

el = maDocument.createElement('img');
el.src = smile.img;
el.alt = smile.txts[0];
SelectionRange = maWindow.getSelection().getRangeAt(0);
SelectionRange.deleteContents();
SelectionRange.insertNode(el);
/* ниже строчки что добавили */
SelectionRange.selectNode(el);
SelectionRange.collapse(false);

da_ff 13.01.2010 12:30

Ага. все равно не очень. Элементы, которые добавили через insertNode подсвечиваются серым в дальнейшем.

da_ff 13.01.2010 12:57

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

da_ff 13.01.2010 13:02

все это не работает ни в хроме ни в опере

da_ff 13.01.2010 13:22

Для того, чтобы серое подсвечивание снималось надо добавлятять после вставки объекта collapse, тоесть вставка должна выглядеть так

el = maDocument.createElement('img');
el.src = smile.img;
el.alt = smile.txts[0];
SelectionRange = maWindow.getSelection().getRangeAt(0);
SelectionRange.deleteContents();
SelectionRange.insertNode(el);
/* ниже строчки что добавили */
SelectionRange.collapse(false);
SelectionRange.selectNode(el);
SelectionRange.collapse(false);


но опять же это не приводит к нужному результату не в хроме не в опере. видимо надо делать как то координально иначе

da_ff 13.01.2010 16:58

Пока остановился на таком варианте.

SelectionRange.insertNode(el);
SelectionRange.selectNode(el);
maWindow.getSelection().addRange(SelectionRange);
maWindow.getSelection().collapseToEnd();


есть некоторые косяки в хроме, но по крайней мере работает хоть как то, в опере вообще не работает.

По прежнему надеюсь что кто-то поможет?!

Gozar 14.01.2010 10:39

Какой у Вас занимательный блог :)

http://fastcoder.org/articles/?aid=609

da_ff 14.01.2010 12:23

Цитата:

Сообщение от Gozar (Сообщение 40497)
Какой у Вас занимательный блог :)

http://fastcoder.org/articles/?aid=609

и это тоже уже читал. читал и рыдал. от того что в разных браузерах разные методы ведут себя порой по-разному, уж извините за тавтологию)

к примеру, солнышко наше, firefox, раздвигает границы существующего range'а автоматически при изменении собственно границ, однако, надежда наша на светлое будущее, chrome, делает это только после select.addRange. но это пол беды. наша модница, opera, вообще на это болт ложит (уж не знаю почему). "Мама! Она меня игнорирует!!!" методы setStartBefore, setStartAfter, setEndBefore, setEndAfter опять же ведут себя изредка непредсказуемо, что страшно нервирует.

Kolyaj 14.01.2010 12:43

Цитата:

Сообщение от da_ff
к примеру, солнышко наше, firefox, раздвигает границы существующего range'а автоматически при изменении собственно границ, однако, надежда наша на светлое будущее, chrome, делает это только после select.addRange. но это пол беды. наша модница, opera, вообще на это болт ложит (уж не знаю почему).


PeaceCoder 14.01.2010 23:02

ыыы поржал.

da_ff 16.01.2010 11:27

Цитата:

Сообщение от PeaceCoder (Сообщение 40598)
ыыы поржал.

ничуть не смешно. че делать с оперой до сих пор не придумал.

Gozar 16.01.2010 18:34

Цитата:

Сообщение от da_ff (Сообщение 40737)
ничуть не смешно. че делать с оперой до сих пор не придумал.

да уж, опера она особенная

da_ff 16.01.2010 18:36

я конечно операфил со стажем, наверно это заболеванием можно считать, но что ж она так подставляет

Octane 16.01.2010 18:46

А можно тестовую страничку, чтобы попробовать?


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