2016-09-13 3 views
0

Давайте предположим, что у меня есть некоторые HTML вроде этого:Cant получить контейнер выделенного текста (jsfiddle имеется)

<div id='fooBar' contenteditable='true'>Hello <span class="test">World</span></div> 

Javascript Код:

var fooBar = document.getElementById('fooBar'); 

fooBar.addEventListener('click', function() { 
    console.log(window.getSelection().getRangeAt(0).commonAncestorContainer) 
}); 

Вопрос: Почему обыкновение это получить фактический контейнер названный тест? Я не могу понять, почему это не работает. Я даже пробовал его с помощью selection.anchorNode.parentElement. Ничего не работает. Теперь, глядя на внутреннюю архитектуру объекта, который я получаю из window.getSelection(), тогда я не вижу элемент span, указанный как свойство. Что я делаю не так?

https://jsfiddle.net/w7bfmLqd/1/

+0

Это поможет вам: http://stackoverflow.com/questions/6897187/javascript- get-id-of-commonancestorcontainer – Mojtaba

+0

he Range.commonAncestorContainer свойство только для чтения возвращает самое глубокое - или дальше всего вниз дерево документа - узел, который содержит обе граничные точки диапазона. – vaso123

ответ

1

мне удалось получить эту работу с помощью этого:

var fooBar = document.getElementById('fooBar'); 

fooBar.addEventListener('click', function() { 
    console.log(window.getSelection().focusNode.parentElement); 
}); 

https://jsfiddle.net/w7bfmLqd/2/

+0

Но почему черт не работает с anchorNode и commonAncestorContainer? Странно? lol – Asperger

+0

Я имею в виду специально указать getRangeAt (0). должно было сделать все понятным для переводчика – Asperger

+0

https://jsfiddle.net/w7bfmLqd/4/, по-видимому, он делает :) – Yoda

Смежные вопросы