(function() { //下面为帮助函数******************************************************
var M = navigator.userAgent.indexOf("MSIE") != -1 && !window.opera;//浏览器不是IE 同时不是opera[挪威浏览器] 返回true
var V = (document.compatMode == "BackCompat");//可以用来判断当前页面采用的渲染方式


alert('this browser is '+(M?'IE':'non-IE'));
alert('this browser version is IE5.5? '+V) ;    function I(C) {//得到一个对象
        return document.getElementById(C)
    }
    function K(C) {//创建一个对象
        return document.createElement(C)
    }
    function S(C) {//消除输入字符串前后的半角和全角空格 
        return String(C).replace(new RegExp("(^[\\s\\t\\xa0\\u3000]+)|([\\u3000\\xa0\\s\\t]+\x24)", "g"), "")
    }
    function U(C) {
        return String(C).replace(new RegExp("[\\s\\t\\xa0\\u3000]", "g"), "")
    }
    function P(X, G, C) {
        if (M) 
{
//ie浏览器下注册事件,attachEvent(事件类型, 处理函数);
X.attachEvent("on" + G, 
(
function(Y) 
{
return function() 
{
C.call(Y)
}
}
)(X))
        } else {
   //非ie浏览器下注册事件,对应的函数是addEventListener(事件类型, 处理函数, 使用捕获);
               X.addEventListener(G, C, false)
        }
    }
    function N(C) {
        if (M) {
//ie浏览器
            C.returnValue = false
        } else {
//非ie
            C.preventDefault()//preventDefault方法就是可以阻止它的默认行为的发生而发生其他的事情。 
        }
    }
    function R(G) {
        if (M) 
{
//ie浏览器,为元素添加样式
            var X = document.createStyleSheet();
            X.cssText = G
        } else {
//非ie
            var C = document.createElement("style");
            C.type = "text/css";
            C.appendChild(document.createTextNode(G));
            document.getElementsByTagName("HEAD")[0].appendChild(C)
        }
    }
    function H(Y) {

        var X = document.forms[0];
        for (var G in Y) {
            if (Y[G] == undefined) {
                if (I("bdsug_ipt_" + G)) {
                    X.removeChild(I("bdsug_ipt_" + G))
                }
            } else {
                if (!O(G)) {
                    X.appendChild(C(G, Y[G]))
                } else {
                    O(G).value = Y[G]
                }
            }
        }
        function C(b, Z) {
            var a = K("INPUT");
            a.type = "hidden";
            a.name = b;
            a.id = "bdsug_ipt_" + b;
            a.value = Z;
            return a
        }
    }
    function O(X) {//表单中input的name

        var Y = document.forms[0];//得到第一个表单
        var Z = false;
        var C = Y.getElementsByTagName("INPUT");//得到表单中的所有的input
        for (var G = 0; G < C.length; G++) {
            if (X == C[G].getAttribute("name")) {//循环匹配表单中的所有input,getAttribute("name")表示得到当前对象的name属性
                Z = C[G];
                return Z
            } else {
                Z = false
            }
        }
    }
    function L(X) {
        var G = document.forms[0];//得到第一个表单
        for (var C in X) {
            if (C == "f") 
{
                if (O("f"))
{
                    if (O("f").id == "bdsug_ipt_f") 
{
                        G.removeChild(I("bdsug_ipt_f"))
                    } else {
                        O("f").value = "8"
                    }
                }
            } else {
                if (I("bdsug_ipt_" + C)) {
                    G.removeChild(I("bdsug_ipt_" + C))
                }
            }
        }
    }
//上面为帮助函数******************************************************    var A = 0;
//window.bdsug自己声明的对象
    if (typeof window.bdsug != "object" || window.bdsug == null) {

        window.bdsug = {}//重新初始化该对象
    }
    bdsug.sug = {};
    bdsug.sugkeywatcher = {};
//声明J对象开始
    var J = (function() {
        function C(X) 
{
            var Z = this.__MSG_QS__;
            if (!Z[X]) {
                Z[X] = []
            }
            for (var Y = 1,b = arguments.length,a; Y < b; Y++) {
                Z[X].push(arguments[Y])
            }
        }
        function G(Z) 
{
            var Y = this.__MSG_QS__[Z.type];
            if (Y == null) {
                return
            }
            for (var X = 0,
            a = Y.length; X < a; X++) {
                Y[X].rm(Z)
            }
        }
        return {
            ini: function(X) {  //声明一个函数,名称为ini
                X.__MSG_QS__ = {};  //为传进来的对象添加属性
                X.on = C;           //为传进来的对象添加方法
                X.dm = G;           //为传进来的对象添加方法
                return X
            }
        } //var J = (function() { 
        //return {
           // zzl: function(X) {
              //  return ++X
           // }
        //     }
//})();
//alert(J.zzl(7));//输出8    })();

//声明J对象结束

解决方案 »

  1.   

    //声明F对象开始 F.on("need_data", B);
        var F = (function() {
            var n = I("kw");//得到id为kw[搜索文本框]的对象
            var e;
            var b = 0;
            var p = 0;
            var g = "";
            var m = "";
            var h;
            var Y = false;
            var j = true;
            var c;
            var Z = I("su");//"百度一下"按钮对象
            P(Z, "mousedown", l);//为文本框注册事件,l为"L",而不是"1"
            P(Z, "keydown", l);//为文本框注册事件,l为"L",而不是"1"
            P(I("kw"), "paste",
            function() {
                H({
                    rsv_n: 2
                });
                if (A == 0) {
                    A = new Date().getTime()
                }
            });
            function l() {
                H({
                    inputT: A > 0 ? (new Date().getTime() - A) : 0
                })
            }
            function k() {
                if (j) {
                    F.dm({
                        type: "start"
                    });
                    j = false
                }
            }
            function f(q) {
                if (A == 0) {
                    A = new Date().getTime()
                }
                if (j) {
                    F.dm({
                        type: "start"
                    });
                    j = false
                }
                q = q || window.event;
                if (q.keyCode == 9 || q.keyCode == 27) {
                    F.dm({
                        type: "hide_div"
                    })
                }
                if (q.keyCode == 13) {
                    N(q);
                    F.dm({
                        type: "key_enter"
                    })
                }
                if (q.keyCode == 86 && q.ctrlKey) {
                    H({
                        rsv_n: 2
                    })
                }
                if (e.style.display != "none") {
                    if (q.keyCode == 38) {
                        N(q);
                        F.dm({
                            type: "key_up"
                        })
                    }
                    if (q.keyCode == 40) {
                        F.dm({
                            type: "key_down"
                        })
                    }
                } else {
                    if (q.keyCode == 38 || q.keyCode == 40) {
                        F.dm({
                            type: "need_data",
                            wd: n.value
                        })
                    }
                }
            }
            function X() {
                var q = n.value;
                if (q == g && q != "" && q != m && q != h) {
                    if (p == 0) {
                        p = setTimeout(function() {
                            F.dm({
                                type: "need_data",
                                wd: q
                            })
                        },
                        100)
                    }
                } else {
                    clearTimeout(p);
                    p = 0;
                    g = q;
                    if (q == "") {
                        F.dm({
                            type: "hide_div"
                        })
                    }
                    if (m != n.value) {
                        m = ""
                    }
                }
            }
            function G() {
                b = setInterval(X, 10)
            }
            function d() {
                clearInterval(b)
            }
            function a() {
                if (Y) {
                    window.event.cancelBubble = true;
                    window.event.returnValue = false;
                    Y = false
                }
            }
            function i(q) {
                n.blur();
                n.setAttribute("autocomplete", q);
                n.focus()
            }
            function o(q) {
                var q = q || window.event;
                if (q.keyCode == 13) {
                    N(q)
                }
            }
            n.setAttribute("autocomplete", "off");
            var C = false;
            bdsug.sugkeywatcher.on = function() {  //为bdsug注册函数
                if (!C) {
                    if (M) {
                        n.attachEvent("onkeydown", f)
                    } else {
                        n.addEventListener("keydown", f, false)
                    }
                    C = true
                }
            };
            bdsug.sugkeywatcher.off = function() { //为bdsug注册函数
                if (C) {
                    if (M) {
                        n.detachEvent("onkeydown", f)
                    } else {
                        n.removeEventListener("keydown", f, false)
                    }
                    C = false
                }
            };
            bdsug.sugkeywatcher.on();
            P(n, "mousedown", k);
            P(n, "beforedeactivate", a);
            if (window.opera) {
                P(n, "keypress", o)
            }


            return J.ini({
                rm: function(q) {
                    switch (q.type) {
                    case "div_ready":
                        e = q.sdiv;
                        m = n.value;
                        G();
                        break;
                    case "clk_submit":
                        d();
                        n.blur();
                        n.value = q.wd;
                        break;
                    case "ent_submit":
                        d();
                        n.blur();
                        break;
                    case "key_select":
                        h = q.selected;
                        break;
                    case "close":
                        d();
                        i("on");
                        break;
                    case "mousedown_tr":
                        if (navigator.userAgent.toLowerCase().indexOf("webkit") != -1) {
                            d();
                            setTimeout(G, 2000)
                        }
                        Y = true;
                        break
                    }
                }
            })
        })();
    //声明F对象结束

      

  2.   

    //声明W对象开始
        var W = (function() {
            var d;
            var k = I("kw");
            var Z;
            var h = -1;
            var p;
            var Y;
            var G;
            function X() {
                var q = Z.rows;
                for (var r = 0; r < q.length; r++) {
                    q[r].className = "ml"
                }
            }
            function g() {
                if (typeof(Z) != "undefined" && Z != null && d.style.display != "none") {
                    var q = Z.rows;
                    for (var r = 0; r < q.length; r++) {
                        if (q[r].className == "mo") {
                            return [r, q[r].cells[0].innerHTML]
                        }
                    }
                }
                return [ - 1, ""]
            }
            function c() {
                if (M) {
                    G.style.display = "none"
                }
                d.style.display = "none"
            }
            function o() {
                X();
                this.className = "mo"
            }
            function j(q) {
                W.dm({
                    type: "mousedown_tr"
                });
                if (!M) {
                    q.stopPropagation();
                    q.preventDefault();
                    return false
                }
            }
            function i(r) {
                var q = r;
                return function() {
                    var s = p[q];
                    c();
                    W.dm({
                        type: "clk_submit",
                        oq: I("kw").value,
                        wd: s,
                        rsp: q
                    })
                }
            }
            function f(q) {
                q = q || window.event;
                N(q);
                W.dm({
                    type: "close"
                });
                c(); (new Image()).src = "http://sclick.baidu.com/w.gif?fm=suggestion&title=%B9%D8%B1%D5&t=" + new Date().getTime()
            }
            function n() {
                var q = [k.offsetWidth + 15, k.offsetHeight + 10];
                d.style.width = ((M && V) ? q[0] : q[0] - 2) + "px";
                d.style.top = ((M && V) ? q[1] : q[1] - 1) + "px";
                d.style.display = "block";
                if (M) {
                    G.style.top = ((M && V) ? q[1] : q[1] - 1) + "px";
                    G.style.width = ((M && V) ? q[0] : q[0] - 2) + "px"
                }
            }
            function m(s, t) {
                if (s && t) {
                    var r = S(s);
                    if (t.indexOf(r) == 0) {
                        t = C(t, r)
                    } else {
                        if (t.indexOf(U(s)) == 0) {
                            r = U(s);
                            t = C(t, r)
                        } else {}
                    }
                }
                t = t.replace("&", "&amp;");
                return t
            }
            function C(u, s) {
                var r = "<span>" + s + "</span>";
                var q = s.length;
                var t = "<b>" + u.substring(q) + "</b>";
                return (r + t)
            }
            function b() {
                Z = K("TABLE");
                Z.id = "st";
                Z.cellSpacing = 0;
                Z.cellPadding = 2;
                var s = K("tbody");
                Z.appendChild(s);
                for (var r = 0,
                q = p.length; r < q; r++) {
                    var t = s.insertRow( - 1);
                    P(t, "mouseover", o);
                    P(t, "mouseout", X);
                    P(t, "mousedown", j);
                    P(t, "click", i(r));
                    var u = t.insertCell( - 1);
                    u.innerHTML = m(Y, p[r])
                }
                d.innerHTML = "";
                d.appendChild(Z);
                n();
                if (M) {
                    G.style.display = "block";
                    G.style.left = 0 + "px";
                    G.style.top = k.offsetHeight + 15 + "px";
                    G.style.width = k.offsetWidth + "px";
                    G.style.height = d.offsetHeight - 1 + "px"
                }
            }
            function l() {
                h = g()[0];
                if (h == -1) {
                    W.dm({
                        type: "submit"
                    })
                } else {
                    W.dm({
                        type: "ent_submit",
                        oq: Y,
                        wd: g()[1],
                        rsp: h
                    })
                }
            }
            function a() {
                h = g()[0];
                X();
                if (h == 0) {
                    W.dm({
                        type: "key_select",
                        selected: ""
                    });
                    I("kw").value = Y;
                    h--;
                    L({
                        oq: Y,
                        sug: p[h],
                        rsv_n: 1,
                        rsp: h,
                        f: 3,
                        rsv_sug: rsv_sug
                    })
                } else {
                    if (h == -1) {
                        h = p.length
                    }
                    h--;
                    var q = Z.rows[h];
                    q.className = "mo";
                    W.dm({
                        type: "key_select",
                        selected: p[h]
                    });
                    I("kw").value = p[h];
                    H({
                        oq: Y,
                        sug: p[h],
                        rsv_n: 1,
                        rsp: h,
                        f: 3,
                        rsv_sug: rsv_sug
                    })
                }
            }
            function e() {
                h = g()[0];
                X();
                if (h == p.length - 1) {
                    W.dm({
                        type: "key_select",
                        selected: ""
                    });
                    I("kw").value = Y;
                    h = -1;
                    L({
                        oq: Y,
                        sug: p[h],
                        rsv_n: 1,
                        rsp: h,
                        f: 3,
                        rsv_sug: rsv_sug
                    })
                } else {
                    h++;
                    var q = Z.rows[h];
                    q.className = "mo";
                    W.dm({
                        type: "key_select",
                        selected: p[h]
                    });
                    I("kw").value = p[h];
                    H({
                        oq: Y,
                        sug: p[h],
                        rsv_n: 1,
                        rsp: h,
                        f: 3,
                        rsv_sug: rsv_sug
                    })
                }
            }
            return J.ini({
                rm: function(q) {
                    switch (q.type) {
                    case "div_ready":
                        d = q.sdiv;
                        G = q.frm;
                        break;
                    case "give_data":
                        Y = q.data.q;
                        p = q.data.s;
                        rsv_sug = q.data.t;
                        if (p.length != 0) {
                            b()
                        } else {
                            c()
                        }
                        break;
                    case "key_enter":
                        l();
                        break;
                    case "key_up":
                        a();
                        break;
                    case "key_down":
                        e();
                        break;
                    case "hide_div":
                        c();
                        break;
                    case "mousedown_other":
                        c();
                        break;
                    case "window_blur":
                        c();
                        break;
                    case "need_resize":
                        n();
                        break
                    }
                }
            })
        })();
      

  3.   

    //声明W对象结束 //声明T对象开始
        var T = (function() {
            var C = document.forms[0];
            function Y() {
                if (I("bdsug_ipt_sug")) {
                    if (I("bdsug_ipt_sug").value == S(I("kw").value)) {
                        L({
                            rsv_n: 1,
                            sug: 1
                        })
                    } else {
                        L({
                            f: 1
                        })
                    }
                }
            }
            P(C, "submit", Y);
            function X() {
                Y();
                H({
                    inputT: A > 0 ? (new Date().getTime() - A) : 0
                });
                C.submit()
            }
            function G(Z) {
                H(Z);
                H({
                    inputT: A > 0 ? (new Date().getTime() - A) : 0
                });
                L({
                    sug: 1,
                    rsv_n: 1
                });
                C.submit()
            }
            return J.ini({
                rm: function(Z) {
                    switch (Z.type) {
                    case "clk_submit":
                        G({
                            oq:
                            Z.oq,
                            rsp: Z.rsp,
                            f: 3,
                            rsv_sug: rsv_sug,
                            rsv_sug2: 1
                        });
                        break;
                    case "ent_submit":
                        G({
                            oq:
                            Z.oq,
                            rsp: Z.rsp,
                            f: 3,
                            rsv_sug: rsv_sug,
                            rsv_sug2: 0
                        });
                        break;
                    case "submit":
                        X();
                        break
                    }
                }
            })
        })();
    //声明T对象结束 //声明B对象开始
        var B = (function() {
            var C = {};
            function X(Y) {
                if (typeof C[Y] == "undefined") {
                    B.dm({
                        type: "request_data",
                        wd: Y
                    })
                } else {
                    B.dm({
                        type: "give_data",
                        data: C[Y]
                    })
                }
            }
            function G(Y) {
                C[Y.q] = Y;
                B.dm({
                    type: "give_data",
                    data: C[Y.q]
                })
            }
            return J.ini({
                rm: function(Y) {
                    switch (Y.type) {
                    case "response_data":
                        G(Y.data);
                        break;
                    case "need_data":
                        X(Y.wd);
                        break
                    }
                }
            })
        })();
    //声明B对象结束 //声明Q对象开始
        var Q = (function() {
            var C;
            var G;
            function X(Y) {
                Q.dm({
                    type: "need_cookie"
                });
                if (C) {
                    document.body.removeChild(C)
                }
                C = K("SCRIPT");
                C.src = "http://suggestion.baidu.com/su?wd=" + encodeURIComponent(Y) + "&p=" + G + "&cb=window.bdsug.sug&t=" + (new Date()).getTime();
    //window.bdsug.sug({q:"d",p:true,s:["dnf","dnf官网","dota","dota视频","dj","dream high2","dota英雄出装","dnf70级加点模拟器","dnf双开","dj舞曲"]});
                C.charset = "gb2312";
                document.body.appendChild(C)
            }
            return J.ini({
                rm: function(Z) {
                    switch (Z.type) {
                    case "request_data":
                        X(Z.wd);
                        break;
                    case "give_cookie":
                        var Y = Z.sug;
                        if (Y > 0) {
                            Y = 3
                        }
                        G = Y;
                        break
                    }
                }
            })
        })();
    //声明Q对象结束
        bdsug.sug = function(C) {
            bdsug.dm({
                type: "response_data",
                data: C
            })
        };
        bdsug.initSug = function() {
            bdsug.dm({
                type: "init"
            })
        };
        J.ini(bdsug); //声明E对象开始
        var E = (function() {
            function C() {
                if (navigator.cookieEnabled) {
                    document.cookie = "su=0; domain=www.baidu.com"
                }
            }
            function G() {
                var X = (navigator.cookieEnabled && /sug=(\d)/.test(document.cookie) ? RegExp.$1: 3);
                E.dm({
                    type: "give_cookie",
                    sug: X
                })
            }
            return J.ini({
                rm: function(X) {
                    switch (X.type) {
                    case "close":
                        C();
                        break;
                    case "need_cookie":
                        G();
                        break
                    }
                }
            })
        })();
    //声明E对象结束

    //声明D对象开始
        var D = (function() {
            var c = I("kw");
            var X;
            var Z = document.forms[0];
            var d;
            function b() {
                if (X.offsetWidth != 0 && c.offsetWidth != X.offsetWidth) {
                    D.dm({
                        type: "need_resize"
                    })
                }
            }
            function Y() {
                X = K("DIV");
                X.id = "sd_" + new Date().getTime();
                X.style.display = "none";
                Z.appendChild(X);
                if (M) {
                    d = K("IFRAME");
                    d.style.display = "none";
                    d.style.position = "absolute";
                    X.parentNode.insertBefore(d, X)
                }
            }
            function a(f) {
                f = f || window.event;
                var g = f.target || f.srcElement;
                if (g == c) {
                    return
                }
                while (g = g.parentNode) {
                    if (g == X) {
                        return
                    }
                }
                D.dm({
                    type: "mousedown_other"
                })
            }
            function C() {
                D.dm({
                    type: "window_blur"
                })
            }
            function G() {
                var f = "#" + X.id;
                var e = [];
                D.dm({
                    type: "div_ready",
                    sdiv: X,
                    frm: d
                });
                setInterval(b, 100);
                P(document, "mousedown", a);
                P(window, "blur", C);
                e.push(f + "{border:1px solid #817F82;position:absolute;top:32px;left:0}");
                e.push(f + " table{width:100%;background:#fff;cursor:default}");
                e.push(f + " td{color:#000;font:14px arial;height:25px;line-height:25px;padding:0 8px}");
                e.push(f + " td b{color:#000}");
                e.push(f + " .mo{background:#ebebeb}");
                e.push(f + " .ml{background:#fff}");
                R(e.join(""))
            }
            bdsug.sug.initial = G;
            return J.ini({
                rm: function(e) {
                    switch (e.type) {
                    case "start":
                        G();
                        break;
                    case "init":
                        Y();
                        break
                    }
                }
            })
        })();
    //声明D对象结束
        F.on("need_data", B);
        F.on("close_div", W);
        F.on("key_enter", W);
        F.on("key_up", W);
        F.on("key_down", W);
        F.on("hide_div", W);
        F.on("start", D);
        B.on("request_data", Q);

        B.on("give_data", W);
        bdsug.on("response_data", B);
        bdsug.on("init", D);
        W.on("clk_submit", F, T);
        W.on("ent_submit", F, T);
        W.on("submit", T);
        W.on("key_select", F);
        W.on("close", F, E);
        W.on("mousedown_tr", F);
        D.on("mousedown_other", W);
        D.on("need_resize", W);
        D.on("div_ready", F, W);
        D.on("window_blur", W);
        Q.on("need_cookie", E);
        E.on("give_cookie", Q);
        window.bdsug.initSug()
    })();谁能帮我分析一下上面的js脚本,越详细越好,还有就是
    F.on()
    B.on()
    ....
    这个on函数哪里来的,一直找不到,同事说继承了其他类,可是我不是很信.
      

  4.   

     bdsug.sugkeywatcher.on = function () {
                if (!p) {
                    if (M) {
                        X.attachEvent("onkeydown", f)
                    } else {
                        X.addEventListener("keydown", f, false)
                    }
                    p = true
                }
            };
    return {
      ini: function(X) { //声明一个函数,名称为ini
      X.__MSG_QS__ = {}; //为传进来的对象添加属性
      X.on = C; //为传进来的对象添加方法
      X.dm = G; //为传进来的对象添加方法
      return X
      }
      }
    on 是绑定事件,这是压缩后的代码,变量名全是一个字母,大概知道就可以了