Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 06.04.2013, 23:51
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

вот так должен выглядеть тот пример:
function domRangeCreate() {
  // Найдем корневой контейнер
  var root = document.getElementById('ex2');
  // Найдем контейнеры граничных точек (в данном случае тестовые)
  var start = root.getElementsByTagName('h2')[0].firstChild;
  var end = root.getElementsByTagName('p')[0].firstChild;
  if (document.createRange) {
    // Создаем Range
    var rng = document.createRange();
    // Задаем верхнюю граничную точку, передав контейнер и смещение
    rng.setStart( start, 3 );
    // Аналогично для нижней границы
    rng.setEnd( end, 10 );
    // Теперь мы можем вернуть текст, который содержится в полученной области
    return rng.toString();
  } else {
    return 'Вероятно, у вас IE<9, смотрите реализацию TextRange ниже';
  }
}
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #12 (permalink)  
Старый 06.04.2013, 23:53
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от platedz
И подскажите, почему еще так не работает
а что вы конкретно хотите сделать?
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #13 (permalink)  
Старый 07.04.2013, 00:40
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Конкретно я хочу каретку вернуть на то место, где она печатается.

Ну и заодно разбираюсь с Range. Я так понял в setStart и setEnd нужно передать еще не существующий элемент, если планируется его создать.

Ну и вернуть как-то не выходит ее на место. Пробую так

var txt = window.getSelection().anchorOffset;
var rng = document.createRange(); 
rng.setStart(document.getElementsByClassName("my_class")[8].firstChild,txt );
rng.setEnd(document.getElementsByClassName("my_class")[8].firstChild,txt ); 
var spn = document.createElement("span");
rng.surroundContents(spn);
Ответить с цитированием
  #14 (permalink)  
Старый 07.04.2013, 00:42
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от platedz
я хочу каретку вернуть на то место
для этого вам нужно использовать объект Selection

Сообщение от platedz
Я так понял в setStart и setEnd нужно передать еще не существующий элемент, если планируется его создать.
нужно его создать и вставить в DOM и потом передать ссылку на него.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #15 (permalink)  
Старый 07.04.2013, 00:54
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Спасибо. Сейчас попробую через selection, но в целом вот такой пример нормально работает в хром

var rng = document.createRange(); 
rng.setStart(this.firstChild,3);
rng.setEnd(this.firstChild,3); 
rng.surroundContents(document.createElement("span"));


Каретка всегда висит на 3 позиции, а в опере не работает.

Правда у меня в хром событие oninput а в опере onkeypress.
Ответить с цитированием
  #16 (permalink)  
Старый 07.04.2013, 13:05
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Что-то я так и не понял, как можно через selection установить выделение. Пример по ссылке выше, показывает как выделить тег span, а мне нужно вернуть на определенную позиции по количеству символов курсор.
Ответить с цитированием
  #17 (permalink)  
Старый 08.04.2013, 00:47
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

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

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

В связи с этим возник вопрос, как можно указать несколько событий.
Ответить с цитированием
  #18 (permalink)  
Старый 08.04.2013, 02:06
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

И подскажите, пожалуйста, как мне передать аргумент, скажем так

function fun(i){alert(i);}
document.getElementsByClassName("my_class")[0].onkeypress = fun(5);

или через attachEvent

Какие вообще есть способы?
Ответить с цитированием
  #19 (permalink)  
Старый 08.04.2013, 02:49
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

И подскажите, пожалуйста, как определить какое именно событие произошло. Скажем я вызываю одну функцию на событие onkeypress и оninput, но в ней хочу разделить условия в зависимости от вызванного события.
Ответить с цитированием
  #20 (permalink)  
Старый 08.04.2013, 04:20
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Также заметил, что при вставке в файрфокс html текста, текст, как таковой не вставляется, зато разделяется блок с contentEditable, и получается два одинаковых блока. Как-то можно это обойти?
Т.е. если пользователь берет текст скажем с блокнота, то текст нормально вставляется, а если со страницы браузера, то во-первых текст не вставляется, во-вторых сам блок разделяется.

Последний раз редактировалось platedz, 08.04.2013 в 04:22.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Эмуляция события клавиатуры (Opera) Shabol Events/DOM/Window 3 10.12.2014 23:03
Дебаг js, или как найти обработчик события для тега jimm88 Events/DOM/Window 1 18.04.2012 15:11
Передача параметров в колбэки и дальнейшее их вешанье на события. Gremlin Общие вопросы Javascript 17 13.08.2011 08:54
Не срабатывают события из iframe при перетаскивании в него курсора в Opera jaguar954 Events/DOM/Window 1 01.08.2011 12:17
Opera не выполняет style.fontSize=... в поле input Маэстро Opera, Safari и др. 6 20.06.2011 12:03