«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как эффективно обнаруживать слова, на которые нажимают в тексте, с помощью JavaScript?

Как эффективно обнаруживать слова, на которые нажимают в тексте, с помощью JavaScript?

Опубликовано 11 ноября 2024 г.
Просматривать:223

How to Efficiently Detect Words Clicked on in Text with JavaScript?

Определять слова, на которые щелкают мышью, в тексте с помощью JavaScript

При создании сценария JavaScript, который позволяет пользователям выбирать слова, щелкая по ним, возникает вопрос возникает вопрос: как этого можно достичь эффективно и элегантно?

Многословный метод с использованием класса Синтаксический анализ

Обычный, но утомительный подход включает в себя анализ всего HTML, разделение каждого слова, разделенного пробелами, и обертывание каждого слова в элемент . Затем добавляется прослушиватель событий для обнаружения кликов по классу слов, а слово, по которому щелкнули, получается через $(this).innerHTML. Хотя этот метод работает, его производительность и эстетика оставляют желать лучшего.

Оптимизированное решение без анализа классов

Для более эффективного и элегантного решения рассмотрите следующее:

Шаг 1. Захват выделения

Используйте window.getSelection() для захвата выбор пользователя.

Шаг 2. Определите границы слов

Пройдитесь по диапазону выбора, чтобы определить начальную и конечную точки выбранного слова, избегая пробелов.

Шаг 3. Получите выбранное слово

Объедините идентифицированные символы в пределах диапазона выбора, чтобы сформировать слово, по которому щелкнули.

Пример реализации

Следующий код JavaScript обеспечивает практическую реализацию этого решения:

$(".clickable").click(function (e) {
  s = window.getSelection();
  var range = s.getRangeAt(0);
  var node = s.anchorNode;

  // Find starting point
  while (range.toString().indexOf(' ') != 0) {
    range.setStart(node, (range.startOffset - 1));
  }
  range.setStart(node, range.startOffset   1);

  // Find ending point
  do {
    range.setEnd(node, range.endOffset   1);
  } while (
    range.toString().indexOf(' ') == -1 &&
    range.toString().trim() != ''
  );

  // Alert result
  var str = range.toString().trim();
  alert(str);
});
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3