我正在围绕Rangy JavaScript 插件开发一个 JavaScript 包装器。我正在尝试做的事情:给定一个 jQuery 选择器和一个范围,检测该范围是否包含在选择器中。这是一个用户将阅读文档并能够对特定部分进行评论的空间。所以我有一个id="viewer"
包含文档的 div,并且我有一个按钮区域,可以在用户选择一些文本后执行操作。这是(损坏的)功能:
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
}
}