Например, если у меня есть:
<div> Lorem ipsum dolor sit amet, conctetuer adipiscing elit. Curabitur urna felis, convallis quis, placerat in, elementum quis, libero. Nam quis lacus. Vivamus rhoncus quam et metus. Praesent et velit eget sem vestibulum volutpat. Целое число sed risus. Целое число quis libero id diam bibendum luctus. Donec eleifend. Curabitur ut sem. Preesent at est ac sem roncus interdum. Etiam arcu nulla, molestie dictum, mollis sed, imperdiet sit amet, neque. Fusce at nibh sit amet mi eleifend aliquam. Nunc tristique scelerisque risus. Praesent et velit id magna volutpat volutpat. </div>
... а затем он загружается в браузер, и я нахожу указатель мыши на различные слова, есть ли какой-нибудь разумный способ определить, над каким словом наведен курсор? Какой-нибудь необоснованный способ?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я не думаю, что это возможно. Вам нужно будет заключить каждое слово в какой-то идентифицируемый тег, например диапазон.
Необоснованный способ включает вычисление по координатам x, y мыши, а затем подсчет во внутренней карте абзаца. Это, конечно, сломается, когда следующий пользователь использует другой шрифт / размер.
Посмотрите эти надоедливые всплывающие окна с рекламой intellitag, которые появляются при наведении курсора на ключевое слово. Вы заметите, что они добавляются после загрузки страницы с помощью javascript, который читает каждое слово и заменяет важные слова окруженными промежутками.
О, возможно вы имеете в виду, если бы я контролировал сервер. Нет, я ищу простой способ выбирать и сохранять предложения при просмотре веб-страниц. Все, что окажется лучшим пользовательским интерфейсом, будет использоваться в одном или нескольких сценариях Greasemonkey / Chickenfoot / надстройке Firefox.
Я думаю, мы все предполагали, что вам нужен контроль на стороне сервера, и поэтому это так сложно. На клиенте это в миллион раз проще, все контекстные меню знают, какой текст выбран, не так ли?
Кажется, я так и не узнал, что мне нужно давать абсолютно полные спецификации. В конце концов, мне нужно не только выбранное слово, мне нужно выбранное предложение. И поскольку я буду выбирать очень много предложений, я хочу иметь возможность щелкнуть один раз в любом месте предложения и программно обнаружить его оттуда.
Я понятия не имею, помогает это или нет, так как я не смотрел код, я бы проверил времена Нью-Йорка. Я говорю это, потому что считаю, что они настроили сайт, чтобы вы могли дважды щелкнуть любое слово и получить определение. Это может быть место для начала.
Это может быть основано на выделенном тексте, а не на наведении указателя мыши.
Это - при изменении выбора появляется кнопка.
Это должно быть тяжело, но работает (jQuery):
// highlight every word found in a <p>
$("p").each(
function () {
var content = "";
var words = $(this).html().match(/\W*\w+/g) ;
var in_tag = false ;
for (i in words) {
if (words[i].match(/^\W*</)) {
in_tag = true ;
}
if (words[i].match(/^\W*>/)) {
in_tag = false ;
}
if (in_tag) {
content += words[i];
} else {
content += words[i].replace(/(\w+)/,'<span class = "word">$1</span>');
}
}
$(this).html(content);
}
);
// example event
$(".word").mouseover(function() { $(this).css("background-color","#FF0") });
$(".word").mouseout(function() { $(this).css("background-color","") });
Вы можете заменить $ ("p") на $ ("# mydiv").
Обновлено: Я написал, что есть теги с ошибками, но теги здесь не проблема; проблема в том, что этот код не справляется с сущностями HTML. На текущей странице, например, при обработке & lt; div & gt ;, "gt" и "lt" преобразуются, как будто они сами по себе слова, что действительно неверно. Регулярные выражения должны быть немного сложнее, чтобы исправить эту ошибку.
Подсчет во внутренней карте абзаца? Я не уверен, что понимаю, что вы имеете в виду ...