Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Положение курсора в строке обычного HTML текста (НЕ input и textarea) (https://javascript.ru/forum/misc/18172-polozhenie-kursora-v-stroke-obychnogo-html-teksta-ne-input-i-textarea.html)

Murmurianez 20.06.2011 19:44

Положение курсора в строке обычного HTML текста (НЕ input и textarea)
 
Есть конструкция вида: <div>Некоторый текст</div>

Нужно получить положение курсора в этой строке (номер символа, рядом с которым щёлкнули мышкой) любым способом...

trikadin 20.06.2011 19:59

Вероятно, вам сюда.

FINoM 20.06.2011 20:05

Можно говнокодом: если текст в диве небольшой, обернуть каждый символ в спан.

Murmurianez 20.06.2011 20:19

Trikadin
Я курил этот мануал, но там обязательно нужен выделенный текст, а у нас курсор нулевой длины. Но за русский вариант статьи спасибо - в закладки)

FINoM
Не настолько любым способом))

person 21.06.2011 06:50

а если contenteditable? закинул атрибут в тег, взял курсор, удалил атрибут.
может получится.

а где такая нужда вылезла?, просто интересно.

Murmurianez 21.06.2011 15:34

Person
Пробовал такой вариант - не возвращает положение курсора (или, может я чего-то не знаю/не нашёл)

Делаю, только не смеяться, очередной wisiwyg.

НО! С одинаковыми тегами на выходе во всех барузерах - ничего подобного не нашёл, а очень нужно.
Положение курсора - единственная принципиально не решённая проблема.

trikadin 21.06.2011 16:08

И зачем вам это в визивиге?

Murmurianez 21.06.2011 16:52

Trikadin
Не очень понял вопрос поэтому отвечаю на всё что понял.

Wisiwyg рассчитан на уровень секретарши, а обрабатывать то, что она введёт - мне (нужно отслеживать абзацы - с этим у wisiwyg'ов (браузеров) самая большая проблема).

Браузер неизвестен - сейчас немерено доморощенных, если учитывать планшеты и т.п. И под каждый затачивать PHP-оптимизацию - не вариант.

Да и возможность добавления кнопки на любой тег без геммороя, тоже совсем не лишняя + полное соответствие тому, что видим и тому что будет после сохранения.

monolithed 21.06.2011 18:13

есть метод document.elementFromPoint(x, y);, с помощью него можно получить элемент находящийся под курсором, а там уже как удобней

Murmurianez 21.06.2011 19:29

Monolithed
Мне б такую карму)
Боюсь, элемент и символ в строке - разные вещи.
При получении элемента получим подобный эффект:
http://javascript.ru/forum/events/17...navedenii.html (запустить нижний пример)
А при пляске от него - та же самая проблема.

person 22.06.2011 06:38

Есть же "стандартные", давно отлаженные функции для полей, они что не работают? нужно что то специфическое?
Попробуй на fastcoder.ru поспрашивать, trikadin ссылку давал, сам этим пользуюсь, лучше не видел.

9xakep 22.06.2011 07:32

Цитата:

Сообщение от Murmurianez (Сообщение 109797)
Monolithed
Мне б такую карму)
Боюсь, элемент и символ в строке - разные вещи.
При получении элемента получим подобный эффект:
http://javascript.ru/forum/events/17...navedenii.html (запустить нижний пример)
А при пляске от него - та же самая проблема.

а что нельзя каждую букву в <div> заключить дай определенный id и у тебя будет тот желаемый эффект,или нет?
то есть что-то такое:
<div><div id="t">Т</div><div id="e">e</div><div id="k>k</div><div id="c">c</div><div id="t2">т</div></div>

trikadin 22.06.2011 14:06

Murmurianez, мне кажется, вот решение твой проблемы:

<html>
<body>
<div contenteditable="true" id="edDiv">
Текст)
</div>
<button onclick="return clicker()">Вставить &lt;b&gt;</button>
<script>
function clicker() {
 var sel= window.getSelection();
 var rng= document.createRange()
 rng.setStart(sel.anchorNode, sel.anchorOffset);
 rng.setEnd(sel.focusNode, sel.focusOffset);
 var bi= document.createElement("b");
 rng.surroundContents(bi);
};
</script>
</body>
</html>


Все методы, которые я тут использовал, описаны в статье, ссылку на которую я отправлял. Ну, и для ie допилишь ф-цию сам. И вообще допилишь её.

Murmurianez 22.06.2011 14:53

Person
Ссылка то хорошая, да не та...
На 2007.fastcoder.ru тоже поспрашиваю...

9xakep
FINoM уже предлагал такое решение - текст, даже при использовании своего тега из одной буквы, вырастит нереально (а текст может быть очень большой, да ещё и utf-8), хотя я это могу на сервер и не передавать...

Обработка 200Кб x 2 текста - надо подумать ещё раз. Похоже, самое простое решение - самое единственное...
Не, не вариант, ещё каждой букве id прописывать.

Trikadin
Спасибо за старание, но это не то. Мне нужен номер символа и больше ничего. А это стандартный подход к написанию wisiwig, с которым я и борюсь, при котором каждый браузер будет выдавать свою разметку (http://habrahabr.ru/blogs/webdev/107829/)

monolithed 22.06.2011 18:18

Цитата:

Сообщение от Murmurianez
Не, не вариант, ещё каждой букве id прописывать.

для чего?

(Sandr) 22.06.2011 21:18

Автор, возможно если ты разберёшься в коде этой игры, то поймёшь как сделать
http://www.wwk.kiev.ua/squares.html (не реклама)

Murmurianez 23.06.2011 00:06

Monolithed
Чтобы узнать номер той самой буквы. А как ещё?

(Sandr)
Не то, символьный и координатный курсор - разные вещи. Но, игруха забавная.
Я уж не знаю, спам ты или нет, но мы тут с другом жёстко втянулись - он её себе уже на PSP хочет. Рекорд на двоих - 7.333
А сюжет то какой - про лётчиков...

trikadin 23.06.2011 01:54

Murmurianez, к сожалению, у вас только эти варианты. Use it)

monolithed 23.06.2011 11:57

Цитата:

Сообщение от Murmurianez
Чтобы узнать номер той самой буквы. А как ещё?

очевидно, что по индексу элемента

Murmurianez 23.06.2011 23:45

Trikadin
Зато остальное отсеяли - теперь голову ломать не надо - просто делать и проверять на юзабельность.

Monolithed
Почитал мануалов - теперь очевидно)

Спасибо всем за участие! Удачи!


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