• 一个网站的诞生 MagicDict开发总结6 [划词 检索]


    划词检索,一个好的字典网站所必须的功能。这个功能包括2部分内容,第一个部分是,在鼠标弹起的时候(MouseUp)知道鼠标的具体位置,显示一个【查询】的图标,第二个部分是,知道用户选中的词语。所有的操作都是纯JS的代码,第一次写JS,不好的地方,请高手指点鞭策。

    首先,在JS里面写一句鼠标MouseUp时候,触发事件的声明

    //划词检索
    document.onmouseup = showselect;

     这样的话,鼠标MouseUp的时候,就会触发showselect事件了。

    接下来就是重头戏了,或许选中位置和选中文本。

    需要说明一下的是,

    iframeMode 这个标志表示划词的窗体是不是iframe。原本想支持网页内部iFrame的划词检索,不过IE6有Bug,我没有办法实现。FF可以实现iframe内部的划词。

    其中的 

    btnRunSearch 是一个按钮Input,开始时候是隐藏的,在划词的时候才出现在划词的位置上。如果用户按下这个按钮,就执行检索动作。

    function showselect(e) {
        
    if (iframeMode == true) {
            
    return
        }
        
    // 返回 selectedText 对象(FF/IE OK)
        if (window.getSelection) {
            selectedText 
    = window.getSelection().toString();
        } 
    else if (document.selection) {
            selectedText 
    = document.selection.createRange().text;
        }
        document.getElementById(
    "btnRunSearch").style.display = "none";
        selectedText 
    = selectedText.replace(/\s/g, '');
        
    if (selectedText != "" && realSearch) {
            selectedText 
    = selectedText.substring(020);
            document.getElementById(
    "btnRunSearch").style.display = "block";
            
    if (e == null) {
                document.getElementById(
    "btnRunSearch").style.left = (event.clientX + document.documentElement.scrollLeft) + "px";
                document.getElementById(
    "btnRunSearch").style.top =  (event.clientY + document.documentElement.scrollTop) + "px";
            } 
    else {
                document.getElementById(
    "btnRunSearch").style.left = e.pageX + "px";
                document.getElementById(
    "btnRunSearch").style.top =  e.pageY + "px";
            }
        }
    }

     这段代码在IE,FF下面可以执行。

    不过如果想获得iframe里面的鼠标弹起的位置,我怎么做都完成不了。FF里面可以,不过IE里面,鼠标位置死活就是取不到,有哪位大侠可以帮忙修改一下。

    function showselectforiframe(e) {
        
    var iframeid = document.getElementById("iframeid"); //iframe id
        // 返回 selectedText 对象(FF/IE OK)
        if (iframeid.contentWindow.getSelection) {
            selectedText 
    = iframeid.contentWindow.getSelection().toString();
        } 
    else if (iframeid.Document.selection) {
            selectedText 
    = iframeid.Document.selection.createRange().text;
        }
        document.getElementById(
    "btnRunSearch").style.display = "none";
        selectedText 
    = selectedText.replace(/\s/g, '');
        
    if (selectedText != "" && realSearch) {
            selectedText 
    = selectedText.substring(020);
            document.getElementById(
    "btnRunSearch").style.display = "block";
            
    if (e == null) {
                document.getElementById(
    "btnRunSearch").style.left = (event.clientX + document.documentElement.scrollLeft) + "px";
                document.getElementById(
    "btnRunSearch").style.top = (event.clientY + document.documentElement.scrollTop) + "px";
            } 
    else {
                document.getElementById(
    "btnRunSearch").style.left = e.pageX + "px";
                document.getElementById(
    "btnRunSearch").style.top = e.pageY + "px";
            }
        }
    }



    新技术没有什么可怕的,有些难题,自己去做了,可能每个人都可以掌握。 Google是我的好朋友,你想要的代码,她都会找给你。。。。

    有兴趣的写信给我 root#magicdict.com   [convert # to @ ]

    或者加MSN mynightelfplayer@hotmail.com

    网站地址 http://www.magicdict.com/

  • 相关阅读:
    Luogu1053 NOIP2005篝火晚会
    BZOJ2151 种树(贪心+堆+链表/wqs二分+动态规划)
    Luogu1155 NOIP2008双栈排序(并查集)
    Luogu1092 NOIP2004虫食算(搜索+高斯消元)
    Codeforces Round#516 Div.1 翻车记
    Luogu1731 NOI1999生日蛋糕(搜索)
    洛谷 P1379 八数码难题 解题报告
    洛谷 P2501 [HAOI2006]数字序列 解题报告
    洛谷 P3143 [USACO16OPEN]钻石收藏家Diamond Collector 解题报告
    洛谷 P2894 [USACO08FEB]酒店Hotel 解题报告
  • 原文地址:https://www.cnblogs.com/TextEditor/p/2065625.html
Copyright © 2020-2023  润新知