имя узла для выделенного текста в JavaScript - PullRequest
1 голос
/ 24 сентября 2010

У меня есть HTML, который выглядит примерно так:

<span id="text">
 <span class="segment" id="first">some text</span>
 <span class="segment" id="sec">bla bla</span>
</span>

и когда пользователь выбирает что-то, я хочу определить, какие элементы он выбрал. Например, если пользователь выбрал «text bl», мне нужны элементы «first» и «sec».

Для этого я попытался использовать endContainer.nodeName , но для каждого выделенного текста я получаю родительский элемент "text" Возможно ли получить дочерние элементы?

var selObj = window.getSelection();
    var selRange = selObj.getRangeAt(0);
    if(selRange!="") {
    var startName = selRange.startContainer.nodeName;
    var endName = selRange.endContainer.nodeName;
    alert(startName+" "+endName);
    }

1 Ответ

1 голос
/ 24 сентября 2010

В вашем примере проблема заключается в том, что начальный и конечный узлы контейнера для выбора являются текстовыми узлами. Вы можете получить элементы контейнера, проверив свойство nodeType:

var startNode = selRange.startContainer;
if (startNode.nodeType == 3) { // 3 is the node type for text nodes
    startNode = startNode.parentNode;
}

... и аналогичные для конечного контейнера.

...