Я работаю над оболочкой JavaScript для плагина Rangy JavaScript .Что я пытаюсь сделать: учитывая селектор jQuery и диапазон, определить, содержится ли диапазон в селекторе.Это для пространства, где пользователь будет читать документ и иметь возможность комментировать определенные разделы.Итак, у меня есть div с id="viewer"
, который содержит документ, и у меня есть область кнопок, которые делают что-то после того, как пользователь выберет какой-то текст.Вот (сломанная) функция:
function selectedRangeInRegion(selector) {
var selectionArea = $(selector);
var range = rangy.getSelection().getRangeAt(0);
var inArea = (selectionArea.has(range.startContainer).length > 0);
if (inArea) {
return range;
} else {
return null;
}
}
Похоже, что selectionArea.has(range.startContainer)
возвращает массив размера 0. Я пробовал оборачивать как: $(range.startContainer)
.Любые советы?
Я разработал решение для этой проблемы.Это предполагает, что у вас есть селектор div и что у вашего контента нет div:
function containsLegalRange(selector, range) {
var foundContainingNode = false;
var container = range.commonAncestorContainer
var nearestDiv = $(container).closest("div");
if (nearestDiv.attr("id") == selector) {
return true
}
else {
return false
}
}