当前位置: 移动技术网 > IT编程>脚本编程>vue.js > 基于vue实现多引擎搜索及关键字提示

基于vue实现多引擎搜索及关键字提示

2018年05月03日  | 移动技术网IT编程  | 我要评论

陈馨儿,辽宁农业职业技术学院,护拦网

本文实例为大家分享了vue实现多引擎搜索及关键字提示的具体代码,供大家参考,具体内容如下

关键代码:

<div class="header-search">
      <form id="form" action="http://m.baidu.com/s" method="get" accept-charset="utf-8" class="clearfix" autocomplete="off">
        <a>
          <span class="search-media"></span>
        </a>
        <input id="searchdata" type="text" placeholder="搜索一下" name="word" @keyup="listenwords" @input="listeninput" @focus="listeninput" />
        <span class="del">×</span>
        <a @click="gotosearch">
          <span class="icon-search icon-sign"></span>
        </a>
      </form>
    </div>
    <div id="pageszone" class="clearfix">
      <div id="auto"></div>
      <span class="engi">快速搜索:</span>
      <img src="../../dist/images/google.png" alt="谷歌" id="googlepages" @click="gotogoogle" >
      <img src="../../dist/images/bing.png" alt="必应" id="bing" @click="gotobing" >
      <img src="../../dist/images/zhihu.png" alt="知乎" id="zhihu" @click="gotozhihu" >
      <img src="../../dist/images/sogou.png" alt="搜狗" id="sogo" @click="gotosogou" >
      <img src="../../dist/images/jd.png" alt="京东" id="jd" @click="gotojd" >
      <a @click="close" class="close">关闭</a>
    </div>
fillurls: function() {
        var that = this;
        var strdomin = document.getelementbyid("searchdata").value;
        window.status = "请求中";
        this.$http.jsonp("http://suggestion.baidu.com/su", {  //请求参数
          params: {
           wd: strdomin
          },
          jsonp: 'cb'
        }).then(function(res){
          window.status = "请求结束";
          that.autodisplay(json.parse(res.body).s);
        },function(){
          console.log("error");
        });
      },

      autodisplay: function(autostr) {
        var searchtext = document.getelementbyid('searchdata');
        var autonode = document.getelementbyid('auto'); //缓存对象(弹出框)
        var that = this;
        var docwidth = document.body.clientwidth || document.documentelement.clientwidth;
        var pageszone = document.getelementbyid('pageszone');
        if (autostr.length == 0) {
          console.log("false");
          autonode.style.display = "none";
          return false;
        }
        autonode.innerhtml = "";
        for (var i = 0; i < autostr.length; i++) {
          //创建节点
          var wordnode = autostr[i].replace(searchtext.value,"<b>"+searchtext.value+"</b>");
          var newdivnode = document.createelement('div');
          newdivnode.setattribute("id",i);
          autonode.appendchild(newdivnode);
          var wordspannode = document.createelement('span');
          wordspannode.setattribute('class','suggtext');
          wordspannode.innerhtml = wordnode;
          newdivnode.appendchild(wordspannode);
          var addnode = document.createelement('span');
          addnode.setattribute('class','addtext');
          addnode.innerhtml = '+';
          newdivnode.appendchild(addnode);
          //鼠标点击文字上屏并搜索
          wordspannode.onclick = function () {
            this.highlightindex = this.parentnode.getattribute('id');
            var comtext = autonode.childnodes[this.highlightindex].firstchild.innertext;
            autonode.style.display = "none";
            this.highlightindex = -1;
            searchtext.value = comtext;
            pageszone.style.display = "none";
            that.gotosearch();
          };
          //鼠标点击文字上屏
          addnode.onclick = function () {
            this.highlightindex = this.parentnode.getattribute('id');
            var comtext = autonode.childnodes[this.highlightindex].firstchild.innertext;
            autonode.style.display = "none";
            this.highlightindex = -1;
            searchtext.value = comtext;
          };
          //展示
          if (autostr.length > 0) {
            autonode.style.display = "block";
          } else {
            autonode.style.display = "none";
            this.highlightindex = -1;
          }
          //针对手机竖屏时的显示条数控制
          if (docwidth < 500 && i > 3) {
            break;
          }
        }
      },

      close: function() {
        document.getelementbyid('pageszone').style.display = 'none';
      },

      listenwords: function(event) {
        console.log("listen keyup");
        var that = this;
        var searchinput = document.getelementbyid("searchdata");
        event = window.event || event;
        if (event.keycode == 13) {   // enter
          event.preventdefault();
          that.gotosearch();
        }
        if (event.keycode == 8) {   // backspace
          console.log(searchinput.value.length);
          if(searchinput.value.length == 0){
            searchinput.blur();
            searchinput.focus();
          }
        }
      },

      listeninput: function() {
        var that = this;
        var searchinput = document.getelementbyid("searchdata");
        var auto = document.getelementbyid('auto');
        var pageszone = document.getelementbyid('pageszone');
        var del = document.getelementsbyclassname('del')[0];
        if (searchinput.value == null || searchinput.value == "") {
          auto.innerhtml = "";
          pageszone.style.display = "none";
          del.style.display = "none";
          auto.style.display = "none";
          return;
        }
        pageszone.style.display = "block";
        del.style.display = "block";
        that.fillurls();
        if (this.highlightindex != -1) {
          this.highlightindex = -1;
        }
      },

多引擎搜索很简单,匹配对应参数就好:

window.location.href = "https://m.zhihu.com/search?q=" + document.getelementbyid("searchdata").value;

百度:=

谷歌:=

必应:=

知乎:=

搜狗:=

京东:=

 关键字提示,先通过jsonp请求参数:

var strdomin = document.getelementbyid("searchdata").value;
        window.status = "请求中";
        this.$http.jsonp("http://suggestion.baidu.com/su", {  //请求参数
          params: {
           wd: strdomin
          },
          jsonp: 'cb'
        }).then(function(res){
          window.status = "请求结束";
          that.autodisplay(json.parse(res.body).s);
        },function(){
          console.log("error");
        });

输入框中有文字的时候触发。

其中json.parse用于从一个字符串中解析出json对象。s是suggest words。这里传到autodisplay的参数即关键字提示。

另外将input元素的autocomplete属性设置为off可以关闭自动提示:

<input type="text" name="name" autocomplete="off">

如果所有表单元素都不想使用自动提示功能,只需在表单form上设置autocomplete=off。

最后将获取到的关键字提示放到input下面的节点中即可。

注意:

复制代码 代码如下:
<input id="searchdata" type="text" placeholder="搜索一下" name="word" @keyup="listenwords" @input="listeninput" @focus="listeninput" />

这里因兼容问题绑定了3个事件,其中listenwords专门针对手机键盘的回车键和回退键:

listenwords: function(event) {
        console.log("listen keyup");
        var that = this;
        var searchinput = document.getelementbyid("searchdata");
        event = window.event || event;
        if (event.keycode == 13) {   // enter
          event.preventdefault();
          that.gotosearch();
        }
        if (event.keycode == 8) {   // backspace
          console.log(searchinput.value.length);
          if(searchinput.value.length == 0){
            searchinput.blur();
            searchinput.focus();
          }
        }
      },

如有更好的方式欢迎讨论。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网