单击元素时聚焦输入字段,除非容器中的某些文本突出显示

时间:2016-09-11 13:08:30

标签: javascript jquery mouseevent jquery-events

点击容器元素Alias /blog /path/to/blog/outside/root 时,需要关注输入字段RewriteRule ^/blog(.*)$ /path/to/blog/outside/root$1 [L] ,除非该元素内的文本是(通过双击或鼠标选择突出显示)

#chatInput

小提琴:https://jsfiddle.net/xhykmtwy/4/

2 个答案:

答案 0 :(得分:0)

比我最初认为的解决方案有点长,但这就是我得到的:

b

更新了小提琴:https://jsfiddle.net/xhykmtwy/1/

答案 1 :(得分:0)

您可能需要考虑以下解决方案,该解决方案会检查点击事件后text元素中是否选择了某些文字:

$('#text').click(function () {
    var container = this;
    setTimeout(function () {
        var selectedElement = null;
        var selectedText = null;
        if (window.getSelection) {
            // For modern browsers
            var selection = window.getSelection();
            if (selection) {
                selectedText = selection.toString();
                if (selection.anchorNode) {
                    selectedElement = selection.anchorNode.parentNode;
                }
            }
        }
        else if (document.selection && document.selection.type === "Text") {
            // For IE < 9
            var selection = document.selection;
            selectedText = selection.createRange().text;
        }
        if (!(selectedText && selectedText.length > 0) || (selectedElement !== container && !$(container).has(selectedElement))) {
            setTimeout(function () { $('#chatInput').focus(); }, 0);
        }
    }, 0);
});

根据我的测试,它适用于IE(包括IE7),Firefox和Chrome。唯一的例外是IE中的双击,它不会选择文本。您可以在此jsfiddle中看到结果。

setTimeout的调用可确保所有选择处理都已完成,尤其是在单击所选文本以取消选择时。

致谢:

  1. 我使用了Eineki在How can I get the element in which highlighted text is in?中提出的方法来检查text元素是否包含所选文本。

  2. 用于处理IE中的选择的代码&lt;在Tim Down回复帖子Get the Highlighted/Selected text时发现了9。