javascript - jQuery:仅在特定 div 中触发 keydown

标签 javascript jquery jquery-selectors selection

我有一个包含几个 DIV 元素的页面。当用户按下 CTRL+ENTER 按钮组合时,我需要显示(通过alert())用户之前选择的文本。我找到了solution它就像一种魅力,但仍然剩下一件事。

仅当所选文本位于类为“main_content”的 DIV 内时,我才需要触发事件。我尝试将 keyup 分配给 $('DIV.main_content'),但它不起作用。

是否有办法仅在选择 $('DIV.main_content') 内的文本时才触发事件?

这是在整个文档上触发的工作代码:

// Get user selection text on page
function getSelectedText() {
    if (window.getSelection) {
        return window.getSelection();
    }
    else if (document.selection) {
        return document.selection.createRange().text;
    }
        return '';
}

$(document).ready(function(){
    $(document).keydown(function(e) {
        if(e.which == 13 && e.ctrlKey) {
        alert(getSelectedText());
        return false;
        }
    });
});

See the code with markup in jsFiddle

最佳答案

您在getSelectedText()中有一个错误功能:window.getSelection()返回 Selection对象,而不是字符串。事实上,您将其结果传递给 alert()正在掩盖这一点,因为 alert()隐式地将传递给它的参数转换为字符串。

下面是一些代码,用于检查所选内容是否完全包含在 <div> 中。具有特定类的元素。它适用于所有主要浏览器。

实例:http://www.jsfiddle.net/cVgsy/1/

// Get user selection text on page
function getSelectedText() {
    if (window.getSelection) {
        return window.getSelection().toString();
    }
    else if (document.selection) {
        return document.selection.createRange().text;
    }
    return '';
}

function isSelectionInDivClass(cssClass) {
    var selContainerNode = null;
    if (window.getSelection) {
        var sel = window.getSelection();
        if (sel.rangeCount) {
            selContainerNode = sel.getRangeAt(0).commonAncestorContainer;
        }
    } else if (document.selection && document.selection.type != "Control") {
        selContainerNode = document.selection.createRange().parentElement();
    }
    if (selContainerNode) {
        var node = selContainerNode;
        while (node) {
            if (node.nodeType == 1 && node.nodeName == "DIV" && $(node).hasClass(cssClass)) {
                return true;
            }
            node = node.parentNode;
        }
    }
    return false;
}

$(document).ready(function(){
    $(document).keydown(function(e) {
        if(e.which == 13 && e.ctrlKey && isSelectionInDivClass("main_content")) {
            alert(getSelectedText());
            return false;
        }
    });
});

关于javascript - jQuery:仅在特定 div 中触发 keydown,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4626036/

相关文章:

javascript - 我无法让 Magnific Popup 工作(js noob)

jquery - 如何通过 jQuery 单击更改 html 元素 <li> 的颜色?

javascript - 悬停时jquery float div

javascript - GetOrgChart - 插入Node而不直接扩展它

jquery-ui - 如何使用 jquery 启用/禁用选择框中的选项

javascript - "all not first in a div preceded by a object with class"的 jQuery 选择器

javascript - 在值更改时在范围输入的处理程序上显示所选值

Javascript - Highchart - 数据点和标志的工具提示位置

javascript - WinJS 与 AngularJS

javascript - jQuery - 检查标签的内容是否等于某些文本,然后执行某些操作