如何获取在javascript中单击的单词

如何获取在javascript中单击的单词,javascript,Javascript,我们能得到右键点击的单词和该单词的x,y坐标吗? 我试过: document.onclick=getTextOnClick 现在,如果我选择一些文本,这段代码就可以工作了,但是当我只需点击八次或点击某个单词时,我可以得到相同的代码吗?事件对象给了我点击的坐标。我能得到点击的单词的坐标吗?请帮忙这是什么 文本-> <div id="foo">Hello I am a text. I have no clue why I am here or what I am good for, b

我们能得到右键点击的单词和该单词的x,y坐标吗? 我试过: document.onclick=getTextOnClick

现在,如果我选择一些文本,这段代码就可以工作了,但是当我只需点击八次或点击某个单词时,我可以得到相同的代码吗?事件对象给了我点击的坐标。我能得到点击的单词的坐标吗?请帮忙

这是什么

文本->

<div id="foo">Hello I am a text. I have no clue why I am here or 
what I am good for, but I have QUOTES and other things I can offer.</div>
jQuery->

$('#foo').contents().each(function(_, node) {
    var nodelist = node.textContent.split(/\s/).map(function( word ) {
        return $('<span>', {
            text: word + ' ',
            click: function() {
                alert( $(this).text() );
            }
        }).get(0);
    });

    $('#foo').empty().append(nodelist);
});

Demo->

这可以用纯JavaScript完成,假设您的容器只包含简单的单词:

window.onload = function() {
    var oDiv = document.getElementById("Container");
    var rawHTML = oDiv.innerHTML;
    var arrWords = rawHTML.split(" ");
    oDiv.innerHTML = "";
    for (var i = 0; i < arrWords.length; i++) {
        var curWord = arrWords[i];
        var curSpan = document.createElement("span");
        curSpan.innerHTML = curWord;
        if (i < (arrWords.length - 1))
            curSpan.innerHTML += " ";
        curSpan.onclick = WordClicked;
        curSpan.oncontextmenu = WordClicked;
        oDiv.appendChild(curSpan);
    }
};

function WordClicked() {
    var word = this.innerHTML;
    alert("You clicked: " + word);
    return false;
}

-处理左键和右键单击。

想到的一种方法是将每个单词放在自己的范围内。除此之外,我认为很难找到一个在所有浏览器上一致运行的解决方案。

如果有人帮助,你会接受答案吗?@GeorgeJempty的可能副本:是的,我会接受它作为答案。但只有当我尝试它,它的工作!:您可以添加一条警告,说明为什么直接覆盖window.onload或一般情况下,任何事件处理程序都不是最好的方法。。。ref:@Yoshi的观点是正确的,但我更喜欢尽可能避免复杂的东西——这个例子看起来很简单。如果将每个单词都包装在一个范围内是一个解决方案,那么在服务器上而不是在客户机上进行操作会更高效、更准确。此外,使用DOM文本节点比使用innerHTML安全得多,因为这里假设容器元素内没有标记。最后,它只需要父元素上的一个侦听器,而不是每个跨度上的侦听器。@RobG关于服务器端,不知道这里使用了什么-除非它有数千个字,否则效率不会是问题。关于你的其他观点,他们是正确的,但再一次-只要我们处理的是不是很长的普通文本,它应该是好的。但是如果我的文档有很多文本内容,那么创建这么多的跨距不会减慢它吗?
window.onload = function() {
    var oDiv = document.getElementById("Container");
    var rawHTML = oDiv.innerHTML;
    var arrWords = rawHTML.split(" ");
    oDiv.innerHTML = "";
    for (var i = 0; i < arrWords.length; i++) {
        var curWord = arrWords[i];
        var curSpan = document.createElement("span");
        curSpan.innerHTML = curWord;
        if (i < (arrWords.length - 1))
            curSpan.innerHTML += " ";
        curSpan.onclick = WordClicked;
        curSpan.oncontextmenu = WordClicked;
        oDiv.appendChild(curSpan);
    }
};

function WordClicked() {
    var word = this.innerHTML;
    alert("You clicked: " + word);
    return false;
}