首頁 > 軟體

vue如何將字串的一部分處理為html檔案並渲染到頁面

2022-06-22 22:00:40

將字串的一部分處理為html檔案並渲染到頁面

應用場景

做搜尋功能是有搜尋建議模組,該模組需要對等於輸入搜尋方塊字串的字串進行高亮顯示,效果圖如圖所示:

需求概述

將字串 str = "Hello world hello girls"中的hello新增樣式為圖所示顏色。

渲染核心元件為

 <van-cell
      v-for="(item, index) in suggestList"
      :key="index"
      icon="search"
      @click="sendResult(item)"
    >
      <div slot="title">{{item}}</div>
 </van-cell>

核心思路 

將str = "Hello world hello girls" 轉換為

<span style="color: blue;">Hello</span> world <span style="color: blue;">hello</span> girls

在 渲染到vue提供的命令v-html內就行了 , 第一種方法核心api為String.replace(),第二種方法核心api為 String.split() 和 Array.join()

第一種方法核心程式碼

highlight(str) {
      // 正規表示式//中間的字元只是字串
      // 如果需要動態建立一個正規表示式
      // new RegExp(str, rules) str是正則字串,rules是匹配模式寫在字串中
      const reg = new RegExp(this.suggestText, 'gi')
      const highStr = str.replace(reg, `<span style="color:#3296fa;">${this.suggestText}</span>`)
      return highStr
    },

我自己一開始想到的是vue提供的filters過濾器,發現對v-html內的內容沒有用,並且設計過濾器使用時this指向了undefined ,後面就直接用函數包裹了程式碼如下:

<van-cell
      v-for="(item, index) in suggestList"
      :key="index"
      icon="search"
      @click="sendResult(item)"
    >
      <div slot="title" v-html="highlight(item)"></div>
    </van-cell>

第二種辦法的核心程式碼 

highlight(str) {
      const arr = str.split(this.suggestText)
      const strHtml = arr.join(`<span style="color:blue">${this.suggestText}</span>`)
      return strHtml 
    },

重程式碼量來講第二種明顯優於第一種方法,但是第二種難以想到用起來也很繞,但效率好程式碼少推薦常用 

vue和react如何正常渲染一段html字串

解析data物件中帶有標籤的des欄位

1.react的方法:dangerouslySetInnerHTMl 屬性

<div dangerouslySetInnerHTML = {{__html:返回的html程式碼片段}} ></div>
<div dangerouslySetInnerHTML = {{__html:data.des}} ></div>

原理:

1.dangerouslySetInnerHTMl 是React標籤的一個屬性,類似於angular的ng-bind;

2.有2個{{}},第一{}代表jsx語法開始,第二個是代表dangerouslySetInnerHTML接收的是一個物件鍵值對;

3.既可以插入DOM,又可以插入字串;

2.vue的方法:v-html

<div v-html = "返回的html程式碼片段" ></div>
<div v-html = "data.des" >{{data.des}}</div>

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com