包含在 jquery 选择器中的 Rangy 范围
Rangy range contained within a jquery selector
我正在围绕Rangy JavaScript插件开发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
}
}
这不是has()
的工作方式:传递给它的参数是选择器字符串或 DOM 元素,而range.startContainer
是一个 DOM 节点,实际上可能是文本节点或元素。
我不认为会有一种方法像你希望的那样容易。以下是我能想到的简单。
js小提琴:http://jsfiddle.net/TRVCm/
法典:
function containsRange(selector, range, allowPartiallySelected) {
var foundContainingNode = false;
$(selector).each(function() {
if (range.containsNode(this, allowPartiallySelected)) {
foundContainingNode = true;
return false;
}
});
return foundContainingNode;
}
.has(( 有时可能很奇怪,并在不应该产生.length == 0
时产生。请尝试以下方式:
function selectedRangeInRegion(selector) {
var range = rangy.getSelection().getRangeAt(0);
var selectionArea = selector + ':has(''' + range.startContainer + ''')';
var inArea = $(selectionArea).length > 0);
if (inArea) {
return range;
}
else {
return null;
}
}
相关文章:
- 正在全局范围中查找JavaScript函数
- 如何通过数组更新角度子范围
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- HTML范围:动态设置值属性
- "实例范围”;TypeScript类的getter/setter
- jquery日期选择器年份范围默认值
- Jpgraph:如何手动设置X轴和Y轴的范围
- 在对象数组中查找多个值的d3范围
- 动态加载angularjs并生成控制器和范围
- 如何通过谷歌应用程序脚本从谷歌文档中的位置确定命名范围
- 在Materialize Calendar中设置年份范围
- 在MVVM视图模型中处理应用程序范围的元素
- setInterval游戏循环的范围问题
- AngularJS获取范围中的选定项目
- 从指定范围创建字符数组
- ES6是否引入了一种机制来生成块范围的函数语句(而不是表达式)
- Angularjs无法将单选按钮与嵌套范围内的模型绑定
- ngDialog-弹出窗口未更新范围变量
- 包含在 jquery 选择器中的 Rangy 范围
- Rangy:我可以在恢复多个字符范围以突出显示时提高性能吗?