最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在vue項(xiàng)目實(shí)現(xiàn)一個(gè)ctrl+f的搜索功能

 更新時(shí)間:2020年02月28日 16:01:50   作者:Isaac_Play  
剛剛接到領(lǐng)導(dǎo)通知,需要實(shí)現(xiàn)搜索功能,因?yàn)轫?xiàng)目是vue的而且是手機(jī)端,對(duì)我來(lái)說(shuō)有點(diǎn)小難度。經(jīng)過(guò)小編的一番思索最終還是解決了,今天小編把實(shí)現(xiàn)過(guò)程分享到腳本之家平臺(tái),需要的朋友參考下

這次在項(xiàng)目中遇到了一個(gè)要做一個(gè)搜索功能,因?yàn)轫?xiàng)目是vue的,而且是在手機(jī)端,所以對(duì)這個(gè)搜索功能的實(shí)現(xiàn)和能做到什么樣子都沒(méi)有底,在網(wǎng)上研究了一會(huì),發(fā)現(xiàn)大家的解決方法都各有特色,有引入第三方包的,有遍歷的,確實(shí)都可以實(shí)現(xiàn),但我覺(jué)得在vue中這樣的方法也太過(guò)繁瑣了,于是經(jīng)過(guò)一段時(shí)間的查詢與思索后我自己寫(xiě)了個(gè)簡(jiǎn)單的方法,并記錄下自己思索的過(guò)程

他確實(shí)可以使用

第一步

明確尋求 產(chǎn)品的一萬(wàn)種奇怪要求
對(duì)于開(kāi)發(fā)來(lái)說(shuō),應(yīng)該要知道自己需要什么,不需要什么,理解pm的需求,把功能以最符合ue的樣子呈現(xiàn)出來(lái),而這次的功能需求是非常簡(jiǎn)單明了的,一個(gè)搜索框,底下是文章,搜索框輸入的時(shí)候動(dòng)態(tài)標(biāo)紅,按下回車會(huì)跳到標(biāo)紅的位置,簡(jiǎn)單明了

第二步

尋找靈感 百度救我

對(duì)于已經(jīng)有過(guò)開(kāi)發(fā)經(jīng)驗(yàn)的人來(lái)說(shuō),可能把自己以前的代碼拿去復(fù)用就可以解決問(wèn)題,但對(duì)于我這種第一次開(kāi)發(fā)的菜雞來(lái)說(shuō),對(duì)搜索功能的實(shí)現(xiàn)竟然毫無(wú)頭緒,這種在身邊隨處可見(jiàn)的功能,竟然沒(méi)有細(xì)想過(guò)具體的實(shí)現(xiàn)流程,幸好,現(xiàn)代人的視野就是搜索引擎的視野,去百度上轉(zhuǎn)了一圈之后,見(jiàn)到了各種各樣的方法,但他們都有一個(gè)共同點(diǎn),太復(fù)雜了,復(fù)雜到我看到就有點(diǎn)不太想用,雖然我是那種雖然代碼能成功運(yùn)行就等于沒(méi)問(wèn)題的三流選手,但是看到太過(guò)復(fù)雜的代碼也很影響我一天的心情,所以我選擇了更為簡(jiǎn)單的方法

第三步

進(jìn)入開(kāi)發(fā) bug的無(wú)數(shù)種奇怪煉成方式
首先我的代碼結(jié)構(gòu)如下:

<template>
 <div>
  <div class="header"> //頁(yè)面頭部,搜索框部分
   <div class="search-total">
    <div class="search_model_zt">
     <div class="search">
      <div class="search_icon"><img :src="require('img/search.png')" /></div>
      <div class="search_input"><input v-model="searchitem" @keyup.enter="submit" placeholder="搜索條文" /></div>
     </div>
    </div>
   </div>
  </div>
  <div class="law-content"> //頁(yè)面內(nèi)容部分,具體內(nèi)容由后端傳入的datelist中的lawContent提供
   <div id="content" v-if="datelist" v-html="changeColor(datelist.lawContent)"></div>
  </div>
 </div>
</template>

搜索內(nèi)容把對(duì)應(yīng)內(nèi)容變?yōu)榧t色的函數(shù)就是changeColor

changeColor(item) {
  let searchitem = this.searchitem;  //獲取動(dòng)態(tài)變化的搜索詞
  if (searchitem !== '') { //若搜索詞不為空,對(duì)搜索詞進(jìn)行替換
   return item.replace(new RegExp(searchitem, 'g'), '<a style="color:red" >' + searchitem + '</a>');
  } else {
   return item;
  }
 },

到此,動(dòng)態(tài)輸入標(biāo)紅搜索詞的功能已經(jīng)做好了,但是搜索框還有一個(gè)回車事件我覺(jué)得在實(shí)際上也應(yīng)該有點(diǎn)用,比如跳到第一個(gè)關(guān)鍵詞什么的,這個(gè)時(shí)候,我又看見(jiàn)了一個(gè)神奇的方法

document.getElementsByTagName("a").scrollIntoView();

當(dāng)頁(yè)面可以支持滑動(dòng)時(shí),scrollIntoView可以把對(duì)于元素滑倒頁(yè)面頂部(默認(rèn)),也可以通過(guò)參數(shù)賦值給false讓對(duì)應(yīng)元素賦值到底部,僅支持原生js,jQuery中沒(méi)有這個(gè)方法,那么問(wèn)題來(lái)了,我上面替換出了那么多a標(biāo)簽,怎么能讓他們排好隊(duì)一個(gè)一個(gè)被調(diào)用了,那當(dāng)然只能遍歷了,但是原生js中沒(méi)有jQuery中eq那樣的選擇器,怎么才能讓js知道我要找的是第n個(gè)a標(biāo)簽?zāi)?/p>

submit(){
    let num = document.getElementsByTagName("a").length;  //獲取所有a標(biāo)簽的數(shù)量,這個(gè)頁(yè)面所有的a標(biāo)簽都是由查詢替換獲得的,所以a標(biāo)簽的數(shù)量可以當(dāng)場(chǎng)查詢到關(guān)鍵詞的數(shù)量
    if(num != 0){ //如果查詢關(guān)鍵詞存在,跳到第一個(gè)關(guān)鍵詞的位置,標(biāo)頭增1,走滿一圈歸0
     document.getElementsByTagName("a")[this.searchhead].scrollIntoView(); //scrollIntoView方法只在原生document中可以使用,jquery中沒(méi)有這個(gè)方法,參數(shù)默認(rèn)是true,將這個(gè)元素置于頁(yè)面第一行(如果頁(yè)面可以滑動(dòng)函數(shù)才生效)
     if(this.searchhead < (num - 1)){
      this.searchhead += 1;
     }else if(this.searchhead == (num - 1)){
      this.searchhead = 0;
     }
    }
   },

原來(lái),getElementsByTagName(“a”)返回的是帶有指定標(biāo)簽名的對(duì)象的集合。通過(guò)對(duì)數(shù)組的序列的調(diào)用就可以完成對(duì)方法的依次調(diào)用。
至此,這個(gè)簡(jiǎn)單頁(yè)面的功能已基本實(shí)現(xiàn),

源碼

<script src="../axios/axios.js"></script>
<template>
 <div>
  <div class="header">
   <div class="search-total">
    <div class="search_model_zt">
     <div class="search">
      <div class="search_icon"><img :src="require('img/search.png')" /></div>
      <div class="search_input"><input v-model="searchitem" @keyup.enter="submit" placeholder="搜索條文" /></div>
     </div>
    </div>
   </div>
  </div>
  <div class="law-content">
   <div id="content" v-if="datelist" v-html="changeColor(datelist.lawContent)"></div>
  </div>
 </div>
</template>
<script>
 require('../utils/js/jquery.min.js');
 export default {
  data() {
   return {
    datelist: null,
    searchitem: '',
    searchnum:null,
    searchhead:0,
   };
  },
  created() {
   this.datelist = JSON.parse(sessionStorage.getItem('lawcontent'))
   console.log(this.datelist.lawTypeName)
  },
  methods: {
  changeColor(item) {
  let searchitem = this.searchitem;
  console.log(this.datelist.lawTypeName);
  if (searchitem !== '') {
   return item.replace(new RegExp(searchitem, 'g'), '<a style="color:red" id="seach" >' + searchitem + '</a>');
  } else {
   return item;
  }
 },
   submit(){
    let num = document.getElementsByTagName("a").length;  //獲取所有a標(biāo)簽的數(shù)量,這個(gè)頁(yè)面所有的a標(biāo)簽都是由查詢替換獲得的,所以a標(biāo)簽的數(shù)量可以當(dāng)場(chǎng)查詢到關(guān)鍵詞的數(shù)量
    if(num != 0){ //如果查詢關(guān)鍵詞存在,跳到第一個(gè)關(guān)鍵詞的位置,標(biāo)頭增1,走滿一圈歸0
     document.getElementsByTagName("a")[this.searchhead].scrollIntoView(); //scrollIntoView方法只在原生document中可以使用,jquery中沒(méi)有這個(gè)方法,參數(shù)默認(rèn)是true,將這個(gè)元素置于頁(yè)面第一行(如果頁(yè)面可以滑動(dòng)函數(shù)才生效)
     if(this.searchhead < (num - 1)){
      this.searchhead += 1;
     }else if(this.searchhead == (num - 1)){
      this.searchhead = 0;
     }
    }else{
    }
   },
 }
 };
</script>
<style scoped>
 #content {
  white-space: pre-line;
 }
 .header {
  width: 100%;
  top: 0px;
  background: white;
  padding: 8px 8px;
  border-bottom: 2px solid #f5f5f5;
 }
 .search-total {
  width: 100%;
  height: auto;
 }
 .search_model_zt {
  height: 35px;
  background: #fff;
 }
 .search {
  width: 100%;
  /* margin: auto; */
  border-radius: 30px;
  background-color: #f3f3f3;
  height: 32px;
  position: relative;
 }
 .search_icon {
  position: absolute;
  left: 5%;
  top: 7px;
  width: 16px;
  height: 16px;
 }
 .search_icon img {
  width: 100%;
  height: 100%;
 }
 .search_input {
  margin-left: 14%;
 }
 .search_input input {
  background: none;
  border: none;
  height: 34px;
  width: 100%;
 }
 input {
  outline: none;
  border: 0;
  background: none;
  font-size: 0.9rem;
 }
 .law-content {
  width: 100%;
  height: calc(100% - 95px);
  padding: 27px 18px 40px 16px;
  position: fixed;
  overflow: auto;
 }
 .law-content div {
  color: rgba(85, 85, 85, 1);
  font-size: 14px;
 }
</style>

總結(jié)

到此這篇關(guān)于在vue項(xiàng)目實(shí)現(xiàn)一個(gè)ctrl+f的搜索功能的文章就介紹到這了,更多相關(guān)vue ctrl+f 搜索內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue中數(shù)據(jù)不響應(yīng)的問(wèn)題及解決

    vue中數(shù)據(jù)不響應(yīng)的問(wèn)題及解決

    這篇文章主要介紹了vue中數(shù)據(jù)不響應(yīng)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • element-ui中導(dǎo)航組件menu的一個(gè)屬性:default-active說(shuō)明

    element-ui中導(dǎo)航組件menu的一個(gè)屬性:default-active說(shuō)明

    這篇文章主要介紹了element-ui中導(dǎo)航組件menu的一個(gè)屬性:default-active說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • vue2 webpack proxy與nginx配置方式

    vue2 webpack proxy與nginx配置方式

    這篇文章主要介紹了vue2 webpack proxy與nginx配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Vue集成TinyMCE富文本編輯器的流程步驟

    Vue集成TinyMCE富文本編輯器的流程步驟

    TinyMCE 是一款功能強(qiáng)大的富文本編輯器,廣泛應(yīng)用于各種 Web 應(yīng)用中,本文將詳細(xì)介紹如何在 Vue 項(xiàng)目中集成 TinyMCE,通過(guò)詳盡的步驟說(shuō)明、示例代碼展示以及豐富的配置選項(xiàng),助力開(kāi)發(fā)者輕松實(shí)現(xiàn)內(nèi)容編輯的增強(qiáng)與美化,需要的朋友可以參考下
    2024-11-11
  • 解決VUE打包后與nginx代理出現(xiàn)加載速度超級(jí)慢的問(wèn)題

    解決VUE打包后與nginx代理出現(xiàn)加載速度超級(jí)慢的問(wèn)題

    這篇文章主要介紹了解決VUE打包后與nginx代理出現(xiàn)加載速度超級(jí)慢的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 基于axios 的responseType類型的設(shè)置方法

    基于axios 的responseType類型的設(shè)置方法

    今天小編就為大家分享一篇基于axios 的responseType類型的設(shè)置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-10-10
  • element中el-form-item屬性prop踩坑

    element中el-form-item屬性prop踩坑

    最近需要用到vue,在el-form-item屬性prop上遇到報(bào)錯(cuò)或者沒(méi)綁定到數(shù)據(jù),本文主要介紹了element中el-form-item屬性prop踩坑,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • vue中的input框點(diǎn)擊后不聚焦問(wèn)題

    vue中的input框點(diǎn)擊后不聚焦問(wèn)題

    這篇文章主要介紹了vue中的input框點(diǎn)擊后不聚焦問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • VUE2.0 ElementUI2.0表格el-table自適應(yīng)高度的實(shí)現(xiàn)方法

    VUE2.0 ElementUI2.0表格el-table自適應(yīng)高度的實(shí)現(xiàn)方法

    在開(kāi)發(fā)中,需要表格控件根據(jù)瀏覽器高度進(jìn)行調(diào)整,固定表頭,本文主要介紹了VUE2.0 ElementUI2.0表格el-table自適應(yīng)高度的實(shí)現(xiàn)方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-11-11
  • vue如何實(shí)現(xiàn)關(guān)閉對(duì)話框后刷新列表

    vue如何實(shí)現(xiàn)關(guān)閉對(duì)話框后刷新列表

    這篇文章主要介紹了vue如何實(shí)現(xiàn)關(guān)閉對(duì)話框后刷新列表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04

最新評(píng)論

潮安县| 建德市| 屯留县| 南丰县| 平原县| 延安市| 土默特右旗| 石台县| 化德县| 横山县| 报价| 个旧市| 赤水市| 新安县| 息烽县| 德州市| 义马市| 韶关市| 满洲里市| 东港市| 萨迦县| 禹州市| 招远市| 墨江| 句容市| 玉树县| 淳化县| 墨竹工卡县| 荆门市| 肥西县| 龙胜| 申扎县| 灌云县| 台山市| 大荔县| 天津市| 资阳市| 海原县| 广丰县| 花垣县| 留坝县|