功能仅适用于<pre> element</pre>

时间:2014-06-06 14:28:33

标签: javascript jquery text

function getSelectionText() {
    var text = "";
    if (window.getSelection) {
        text = window.getSelection().toString();
    } else if (document.selection && document.selection.type != "Control") {
        text = document.selection.createRange().text;
    }
    return text;
}
$(document).ready(function () {
    $('div,pre').mouseup(function (e) {
        window.onkeydown = function (event) {
            if (event.keyCode === 81) {
                var gottext = getSelectionText();
                var apiurl = "http://api.urbandictionary.com/v0/define?term=";
                var tofind = apiurl.concat(gottext);
                var xhr = new XMLHttpRequest();
                xhr.open("GET", tofind, true);
                xhr.onload = function (e) {
                    if (xhr.readyState === 4) {
                        if (xhr.status === 200 && gottext != "") {
                            console.log(xhr.responseText);
                            var response = JSON.parse(xhr.responseText);
                            var whattodo = confirm(response.list[0].word + "\n\nDEFINITION: \n\n" + response.list[0].definition + "\n\nEXAMPLE:\n\n" + response.list[0].example + '\n\nPRESS "OK" TO VIEW ADDITIONAL RESULTS');
                        } else {
                            console.error(xhr.statusText);
                        }
                    }
                    if (whattodo == true) {
                        var textret = getSelectionText();
                        var pageurl = "http://www.urbandictionary.com/define.php?term=";
                        var togoto = pageurl.concat(textret);
                        console.log(togoto);
                    }
                };
                xhr.onerror = function (e) {
                    console.error(xhr.statusText);
                };
                xhr.send(null);
            }
        };
    })
});

好的,所以我有这个代码可以获取用户选择的文本,然后在按下Q键时在Urban Dictionary上搜索它。但是,它似乎只在所选文本作为元素时起作用。我怎样才能使它适用于任何类型的文本,无论元素是什么?

使用<pre>进行演示:http://jsfiddle.net/BQSJ3/180/

使用<p>进行演示:http://jsfiddle.net/BQSJ3/182/

谢谢!

3 个答案:

答案 0 :(得分:1)

如果您希望它可以处理任何元素,您只需更改选择器即可处理文档的鼠标:

更改

$('div,pre').mouseup

$(document).mouseup

答案 1 :(得分:1)

如果您希望它可以处理任何元素,只需使用通配符*选择器。

 $("*").mouseup(function (e) { }

你也可以尝试这个......不能完全保证功能:

$("*:not(:empty)").mouseup(function (e) {}

http://jsfiddle.net/BQSJ3/184/

答案 2 :(得分:0)

如果你想让它与p标签一起使用,你不应该把它包含在这里:

$('div,pre').mouseup(function (e) {

如果我将鼠标悬停在所选文本上然后按“q”

,则此选项适用于我

http://jsfiddle.net/BQSJ3/185/