Javascript 检测光标是否在可编辑内容的li范围内
我有一个工作代码,当您在内容可编辑的div中按enter键时,可以插入Javascript 检测光标是否在可编辑内容的li范围内,javascript,jquery,css,contenteditable,Javascript,Jquery,Css,Contenteditable,我有一个工作代码,当您在内容可编辑的div中按enter键时,可以插入。(浏览器有各种默认的插入或) 问题在于,在构建有序或无序列表时,它会终止按enter键添加另一个列表项的默认行为。所以我的问题是,您是否可以检测文本插入点是否在列表项中,如果是,请禁用处理enter键的javascript 工作代码: 您需要对包含所选内容的节点执行一些DOM树检查。以下是一个在所有主要浏览器中都适用的演示: 代码: 您需要对包含所选内容的节点执行一些DOM树检查。以下是一个在所有主要浏览器中都适用的演示
。(浏览器有各种默认的插入
或
)
问题在于,在构建有序或无序列表时,它会终止按enter键添加另一个列表项的默认行为。所以我的问题是,您是否可以检测文本插入点是否在列表项中,如果是,请禁用处理enter键的javascript
工作代码:
您需要对包含所选内容的节点执行一些DOM树检查。以下是一个在所有主要浏览器中都适用的演示: 代码:
您需要对包含所选内容的节点执行一些DOM树检查。以下是一个在所有主要浏览器中都适用的演示: 代码:
问题:jQuery对您可用吗?不请自来的迂腐:你可能是指“插入符号”,或者更可能是指“光标”。编辑:没关系。我看到您的演示使用了jQuery。很好,我将其更新为文本插入点,因为大多数人可能认为“光标”是您用鼠标移动的箭头。问题:jQuery对您可用吗?不请自来的迂腐:你可能是指“插入符号”,或者更可能是指“光标”。编辑:没关系。我看到你的演示使用了jQuery。很好,我更新了它,说它是文本插入点,因为大多数人可能认为“光标”是你用鼠标移动的箭头。看起来li不能有焦点。你是对的,尽管你可以通过应用tabindex绕过它。我已将答案更新为在()上使用,而不是在live()上使用,尽管尚未测试。后者已经被弃用了一段时间,并从jQuery 1.9开始被删除。感谢您进一步研究。我已经在列表项中添加了一些选项卡索引,并更新了代码,以便在关注
alert
语句可以解决这个问题。@DaveJarvis:这一点很好。我添加了一个更新的JSFIDLE。谢谢。很抱歉耽误了你的回复。看起来不错!我将进一步检查它,如果它有效,我将接受答案。这会检测您是否在alert
语句可以解决这个问题。@DaveJarvis:这一点很好。我添加了一个更新的JSFIDLE。谢谢
.on('keypress', 'document', function (e) {
if (!$('li').focus();) {
...
}
}
});
function isSelectionInsideElement(tagName) {
var sel, containerNode;
tagName = tagName.toUpperCase();
if (window.getSelection) {
sel = window.getSelection();
if (sel.rangeCount > 0) {
containerNode = sel.getRangeAt(0).commonAncestorContainer;
}
} else if ( (sel = document.selection) && sel.type != "Control" ) {
containerNode = sel.createRange().parentElement();
}
while (containerNode) {
if (containerNode.nodeType == 1 && containerNode.tagName == tagName) {
return true;
}
containerNode = containerNode.parentNode;
}
return false;
}