Получить идентификатор выбранного узла

Я разрабатываю расширение Firefox, где пользователь выбирает текст, затем этот текст отправляется в веб-службу REST и возвращает некоторые результаты.

Моя проблема с выделением текста, я использовал этот метод, чтобы получить выделенный текст:

var selectedText = window.getSelection();

Я получил результат в переменной selectedText и отправил его на сервер, но я не знаю, как получить идентификатор этого узла или что-то еще, чтобы добавить в него результат.

Я пробовал это как в javascript, так и в jQuery с Firebug и множеством поисковых запросов Google, но без полезного результата!


person Khaled Al Hourani    schedule 09.06.2009    source источник


Ответы (2)


Изменить: так как вам это нужно для расширения FF, вы можете пропустить все функции для IE, и все, что вам нужно сделать, это следующее:

window.getSelection().getRangeAt(0).commonAncestorContainer

Дополнительная информация о диапазонах: https://developer.mozilla.org/en/DOM/range


Уже есть аналогичный вопрос:

Получить выделенный текст и выбранные узлы на странице?

Немного изменил функции:

<script type="text/javascript">
  function getTextSelection() {
    if(document.selection)
      return document.selection;
    else if(window.getSelection)
      return window.getSelection();
    else if(document.getSelection)
      return document.getSelection();
    else
      return false;
  }
  function getSelectionRange() {
    var selection = getTextSelection();
    if(selection.getRangeAt)
      return selection.getRangeAt(0);
    else if (selection.createRange)
      return selection.createRange();
    else
      return false;
  }
  function getSelectionParent(r) {
    if(r.parentElement)
      return r.parentElement;
    else if(r.commonAncestorContainer)
      return r.commonAncestorContainer;
    else
      return false;
  }
</script>

HTML:

<body>
  <p><em>This is just some random text. </em><strong>Select me and then click the button!!!</strong></p>
  <p><input type="button" value="Parent element?" onclick="alert('The selection\'s parent element is: ' + getSelectionParent(getSelectionRange()).nodeName);" /></p>
</body>

Я тестировал этот материал в IE6,7 и FF3.0. Работало без проблем. Единственное, о чем вы должны знать, это то, что IE, в отличие от FF, игнорирует текстовые узлы.

Если вы хотите попробовать сами: http://dev.freedig.org/files/selection.html

person slosd    schedule 09.06.2009
comment
Я прочитал это, он просто дает вам выделенный текст, а не узел, я ошибаюсь? - person Khaled Al Hourani; 10.06.2009
comment
В последнем примере кода получается родительский узел выделенного текста. Я добавил это к своему ответу. - person slosd; 10.06.2009
comment
спасибо, но это тоже не работает :( даже в демонстрационной ссылке он не дает вам объект или элемент - person Khaled Al Hourani; 13.06.2009
comment
Какой браузер вы используете? Я попробовал это с IE и FF, и это сработало. getSelectionParent (getSelectionRange ()) возвращает элемент-узел. - person slosd; 13.06.2009

ИСПОЛЬЗУЙТЕ ЭТО

<script type="text/javascript">
  function getTextSelection() {
    if(document.selection)
      return document.selection;
    else if(window.getSelection)
      return window.getSelection();
    else if(document.getSelection)
      return document.getSelection();
    else
      return false;
  }
  function getSelectionRange() {
    var selection = getTextSelection();
    if(selection.getRangeAt)
      return selection.getRangeAt(0);
    else if (selection.createRange)
      return selection.createRange();
    else
      return false;
  }
  function getSelectionParent(r) {
    if(r.parentElement)
      return r.parentElement;
    else if(r.commonAncestorContainer)
      return r.commonAncestorContainer;
    else
      return false;
  }
</script>

HTML:

<body>
  <p><em>This is just some random text. </em><strong>Select me and then click the button!!!</strong></p>
  <p><input type="button" value="Parent element?" onclick="alert('The selection\'s parent element is: ' + getSelectionParent(getSelectionRange()).nodeName);" /></p>
</body>
person sloutomi    schedule 10.12.2014