Rangy: как расширить выбор на основе родительского узла? - PullRequest
1 голос
/ 29 ноября 2011

HTML, который выбирается:

some te<b>xt here is bold</b>ed, I guess
              |______________________|  <- the selection range

Итак, выбранный .toHtml () это:

<b>ere is bold</b>ed, I gue

но это не в оригинальном документе.

Итак, я хочу расширить выделение, чтобы оно содержало весь тег BOLD.

Это легко обнаружить, так как вам нужно просто выполнить тест, если

a = rangy.getSelection()
a.anchorNode.parentElement != a.focusNode.parentElement

В документации говорится, что для дальних диапазонов используется метод setStartBefore(Node): http://code.google.com/p/rangy/wiki/RangyRange

итак, я получаю текущий диапазон

b = a.getRangeAt(0)

и попробуйте установить StartBefore:

b.setStartBefore(a.anchorNode.parentNode)

и так как я делаю все это в консоли, я получаю немедленный ответ, говорящий

undefined

что могло бы быть причиной этого, и как мне обойти это, чтобы найти решение проблемы, которую я хочу решить?

UPDATE: По предложению Тима Дауна я пробовал следующее:
enter image description here Исходный текст:
enter image description here

Он должен был быть расширен, чтобы включить Масса Ef разве не должно быть?

ОБНОВЛЕНИЕ 2:

Решение (по Тиму Дауну) enter image description here

1 Ответ

3 голосов
/ 30 ноября 2011

Вам необходимо выбрать диапазон:

a.setSingleRange(b);

Кстати, parentElement не поддерживается повсеместно: он запустил только IE, относительно недавно превратил его в спецификацию DOM4 и еще не поддерживается в Firefox (поддержка поступает Firefox 9.0 , видимо). Вам понадобится обходной путь, основанный на parentNode и nodeType.

...