Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.04.2013, 19:11
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

События в opera с contentEditable
Нужно подсчитать количество символов в блоке с contentEditable. Я использовал события Oninput и onpropertychange, но ни одно из них не работает в opera на блоках с атрибутом contentEditable.
Как обойти?

Последний раз редактировалось platedz, 06.04.2013 в 19:16.
Ответить с цитированием
  #2 (permalink)  
Старый 06.04.2013, 19:35
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

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

События oninput и Onpropertychange не работают.
Я ловлю именно эти события, т.к. нужно еще убрать теги и другие ненужные символы.
Ко всему прочему, contentEditable не имеет, насколько я знаю, максимальной длины символом, поэтому приходится еще и принудительно урезать строку. Т.е. заменять полностью текст, и при событии скажем keypress каретка уходит

Последний раз редактировалось platedz, 06.04.2013 в 19:51.
Ответить с цитированием
  #4 (permalink)  
Старый 06.04.2013, 21:29
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Решил попробовать выровнять все это дело с помощью объекта range, но никак не пойму почему так работает
console.dir(document.createRange());

а так не работате
console.dir(document.getElementsByClassName("my_cl ass")[0].createRange());

Подскажите, пожалуйста.

Хотя document.getElementsByClassName("my_class")[0], существует
Ответить с цитированием
  #5 (permalink)  
Старый 06.04.2013, 22:15
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от platedz
Подскажите, пожалуйста.
а спецификацию почитать сложно?
у элементов нет метода createRange, что бы юзать его для конкретного элемента нужно явно его указать. Методы объекта Range почти все принимают в качетсве первого аргумента ссылку на элемент: http://www.w3.org/TR/DOM-Level-2-Tra...ange-Interface
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #6 (permalink)  
Старый 06.04.2013, 22:40
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Я здесь читаю, http://learn.javascript.ru/vydelenie...роме-ie-9, c английским плохо у меня, а как переводит translate.google, так лучше и вовсе не читать.
Объясните, пожалуйста, что значит указать явно.
Ответить с цитированием
  #7 (permalink)  
Старый 06.04.2013, 23:12
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

var node = document.getElementsByClassName("my_cl ass")[0];

var range = document.createRange();
range.setStart(node, 10);


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

ну вот пример, как бы рабочий должен быть

var root = document.getElementById('ex2');

// Найдем контейнеры граничных точек (в данном случае тестовые)

var start = root.getElementsByTagName('h2')[0].firstChild;

var end = root.getElementsByTagName('p')[0].firstChild;

if (root.createRange) {

// Создаем Range

var rng = root.createRange();

Но вот не рабочий пример с этой страницы

var root = document.getElementById('post_message_244584');
var rng = root.createRange();
TypeError: Object #<HTMLDivElement> has no method 'createRange'

В чем разница?

Причем в ВАшем примере корневой контейнер window.document

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

да не нужно создавать объект у элемента.. Ошибка вам что совсем ни о чем не говорит? нету этого метода у элементов, это метод есть только у документа.

Сообщение от platedz
var root = document.getElementById('ex2');
это в учебнике является опечаткой или ошибкой.. все остальное сделано правильно. замените строку:
var root = document.getElementById('ex2');
на вот такую:
var root = document;
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #10 (permalink)  
Старый 06.04.2013, 23:46
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Да, спасибо за ответ. Теперь ясно.

И подскажите, почему еще так не работает

var rng = document.createRange();
rng.setStart(document.getElementsByClassName("my_c lass")[8],0);
rng.setEnd(document.getElementsByClassName("my_cla ss")[8],5);

Последний раз редактировалось platedz, 06.04.2013 в 23:49.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Эмуляция события клавиатуры (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