亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在vue項目中實現一個ctrl+f搜索功能

發布時間:2021-03-11 17:23:50 來源:億速云 閱讀:961 作者:Leah 欄目:web開發

怎么在vue項目中實現一個ctrl+f搜索功能?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

首先代碼結構如下:

<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"> //頁面內容部分,具體內容由后端傳入的datelist中的lawContent提供
   <div id="content" v-if="datelist" v-html="changeColor(datelist.lawContent)"></div>
  </div>
 </div>
</template>

搜索內容把對應內容變為紅色的函數就是changeColor

changeColor(item) {
  let searchitem = this.searchitem;  //獲取動態變化的搜索詞
  if (searchitem !== '') { //若搜索詞不為空,對搜索詞進行替換
   return item.replace(new RegExp(searchitem, 'g'), '<a  >' + searchitem + '</a>');
  } else {
   return item;
  }
 },

到此,動態輸入標紅搜索詞的功能已經做好了,但是搜索框還有一個回車事件我覺得在實際上也應該有點用,比如跳到第一個關鍵詞什么的,這個時候,我又看見了一個神奇的方法

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

當頁面可以支持滑動時,scrollIntoView可以把對于元素滑倒頁面頂部(默認),也可以通過參數賦值給false讓對應元素賦值到底部,僅支持原生js,jQuery中沒有這個方法,那么問題來了,我上面替換出了那么多a標簽,怎么能讓他們排好隊一個一個被調用了,那當然只能遍歷了,但是原生js中沒有jQuery中eq那樣的選擇器,怎么才能讓js知道我要找的是第n個a標簽呢

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

原來,getElementsByTagName(“a”)返回的是帶有指定標簽名的對象的集合。通過對數組的序列的調用就可以完成對方法的依次調用。
至此,這個簡單頁面的功能已基本實現,

源碼

<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  id="seach" >' + searchitem + '</a>');
  } else {
   return item;
  }
 },
   submit(){
    let num = document.getElementsByTagName("a").length;  //獲取所有a標簽的數量,這個頁面所有的a標簽都是由查詢替換獲得的,所以a標簽的數量可以當場查詢到關鍵詞的數量
    if(num != 0){ //如果查詢關鍵詞存在,跳到第一個關鍵詞的位置,標頭增1,走滿一圈歸0
     document.getElementsByTagName("a")[this.searchhead].scrollIntoView(); //scrollIntoView方法只在原生document中可以使用,jquery中沒有這個方法,參數默認是true,將這個元素置于頁面第一行(如果頁面可以滑動函數才生效)
     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>

看完上述內容,你們掌握怎么在vue項目中實現一個ctrl+f搜索功能的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

昭苏县| 苏尼特右旗| 东莞市| 西安市| 麦盖提县| 炉霍县| 成武县| 阜宁县| 金秀| 五华县| 教育| 濮阳市| 武威市| 淮北市| 昭平县| 轮台县| 凉山| 朝阳市| 徐州市| 漳平市| 太白县| 塘沽区| 两当县| 和硕县| 株洲市| 沂南县| 敖汉旗| 黔东| 十堰市| 上虞市| 乳源| 息烽县| 邹城市| 额尔古纳市| 车致| 镇巴县| 枣阳市| 织金县| 微博| 五寨县| 临邑县|