react项目中实现搜索关键字呈现高亮状态(一)
最近有个需求,在一个react项目中,实现搜索关键字呈现高亮状态。这个在普通的html文件中还好操作些,在react项目中有点懵逼了,因为react项目中很少操作dom,有点无从下手。但最后还是实现了效果,如下:
首先来看看如何在react中操作dom,广大网友给出两种方案:
一:使用选择器:
1、引入react-dom
import ReactDom from 'react-dom'
2、给react节点设置id或类名等标识
<span id='tip'></span>
3、定义变量保存dom元素
var span = document.getElementById('tip')
4、通过ReactDom的findDOMNode()方法修改dom的属性
ReactDom.findDOMNode(span).style.color = 'red'
二:使用ref属性
1、给指定标签设置ref属性
<span ref='tip'></span>
2、通过this.refs.ref属性值来修改标签的属性
this.refs.tip.style.color = "red"
我用第二种方案来操作的:
import React from 'react';
import { Input } from 'antd'; const { Search } = Input; // 高亮测试
class Highlight extends React.Component {
constructor(props) {
super(props);
this.state = {
text:<p>writing to a TLS enabled socket, node::StreamBase::Write calls node::TLSWrap::DoWrite with a freshly allocated WriteWrap object as first argument. If the DoWrite method does not return an error, this object is passed back to the caller as part of a StreamWriteResult structure. This may be exploited to corrupt memory leading to a Denial of Service or potentially other exploits\n" +
HTTP Request Smuggling in nodejs Affected versions of Node.js allow two copies of a header field in a http request. For example, two Transfer-Encoding header fields. In this case Node.js identifies the first header field and ignores the second. This can lead to HTTP Request Smuggling (https://cwe.mitre.org/data/definitions/444.html).\n" +
OpenSSL - EDIPARTYNAME NULL pointer de-reference (High) This is a vulnerability in OpenSSL which may be exploited through Node.js. You can read more about it in https://www.openssl.org/news/secadv/20201208.txt</p>
};
} findHighlight = (keyWord)=>{
const str=keyWord.replace(/^(\s|\xA0)+|(\s|\xA0)+$/g, '');
// eslint-disable-next-line react/no-string-refs
const val= this.refs.tip.innerHTML;
const content = this.searchdo(val, str);
// eslint-disable-next-line react/no-string-refs
this.refs.tip.innerHTML=content;
}; searchdo=(content,keyWord)=>{
const keyWordArr = keyWord.split(' ');
let re;
for(let n = 0; n < keyWordArr.length; n +=1) {
re = new RegExp(`${keyWordArr[n]}`,"gmi");
// eslint-disable-next-line no-param-reassign
content = content.replace(re,`<span style="color:#0f0;${keyWordArr[n]}</span>`);
}
return content;
}; render() {
const { text} = this.state;
return (
<div>
<Search
placeholder="请输入查找内容"
onSearch={value => this.findHighlight(value)}
style={{ width: 200 }}
/>
<br />
<br />
<div
style={{
border:"1px solid #ccc",
borderRadius:"4px",
padding:"5px"
}}
ref="tip"
>
{text}
</div>
</div>
);
}
}
export default Highlight;
然后就实现了上面的效果,但是这只是最初步的,如果需要完善功能还需要自己进一步改造。
react项目中实现搜索关键字呈现高亮状态(一)的更多相关文章
- 在 Angular 中实现搜索关键字高亮
在 Angular 中,我们不应该试图直接修改 DOM 的内容,当需要更新 DOM 内容的时候,应该修改的其实是我们的数据模型,也就是 $scope 中的数据,Angular 会帮助我们将修改之后的数 ...
- 如何在非 React 项目中使用 Redux
本文作者:胡子大哈 原文链接:https://scriptoj.com/topic/178/如何在非-react-项目中使用-redux 转载请注明出处,保留原文链接和作者信息. 目录 1.前言 2. ...
- 如何优雅地在React项目中使用Redux
前言 或许你当前的项目还没有到应用Redux的程度,但提前了解一下也没有坏处,本文不会安利大家使用Redux 概念 首先我们会用到哪些框架和工具呢? React UI框架 Redux 状态管理工具,与 ...
- react项目中实现元素的拖动和缩放实例
在react项目中实现此功能可借助 react-rnd 库,文档地址:https://github.com/bokuweb/react-rnd#Screenshot .下面是实例运用: import ...
- React项目中实现右键自定义菜单
最近在react项目中需要实现一个,右键自定义菜单功能.找了找发现纯react项目里没有什么工具可以实现这样的功能,所以在网上搜了搜相关资料.下面我会附上完整的组件代码. (注:以下代码非本人原创,具 ...
- React项目中使用Mobx状态管理(二)
并上一节使用的是普通的数据状态管理,不过官方推荐使用装饰器模式,而在默认的react项目中是不支持装饰器的,需要手动启用. 官方参考 一.添加配置 官方提供了四种方法, 方法一.使用TypeScrip ...
- 在react项目中使用ECharts
这里我们要在自己搭建的react项目中使用ECharts,我们可以在ECharts官网上看到有一种方式是在 webpack 中使用 ECharts,我们需要的就是这种方法. 我们在使用ECharts之 ...
- 优雅的在React项目中使用Redux
概念 首先我们会用到哪些框架和工具呢? React UI框架 Redux 状态管理工具,与React没有任何关系,其他UI框架也可以使用Redux react-redux React插件,作用:方便在 ...
- 深入浅出TypeScript(5)- 在React项目中使用TypeScript
前言 在第二小节中,我们讨论了利用TypeScript创建Web项目的实现,在本下节,我们讨论一下如何结合React创建一个具备TypeScript类型的应用项目. 准备 Webpack配置在第二小节 ...
随机推荐
- 将Java项目打包成exe文件
第一步:参照我之前的博客:利用IDEA把项目打包成jar包第二步:下载安装exe4j软件第三步:新建文件夹,把jre,exe文件的图标,本项目的jar包以及项目用到的jar包都放到同一目录下[很重要] ...
- CF1439C Greedy Shopping
题解 尝试做一下,感觉是每次取一段前缀和,这样就相当于让我们证明在 \(a_i\le 10^{12}\) 时,不可能构造出隔一个取一个的情况(\(n=10^5\)). a[i]: 1, 2, 3, 5 ...
- Day5 - 04 函数的参数-可变参数*
传入的参数的个数是可变的. 例子:定义一个函数,通过给出一组数,返回这组数中最大值与最小值的和. def msum(numbers): r = max(numbers) + min ...
- celery定时执行任务 的使用
1 参照博客 https://www.cnblogs.com/xiaonq/p/9303941.html#i1 1 创建celery_pro包 # 可在任意文件下 2 在 celery_pro 下 ...
- mysql-zerofill关键字
zerofill位数填充 mysql> create table shop( -> article int(4) unsigned zerofill default '0000' not ...
- 阿里云视频点播之URL批量拉取上传(调整为多个视频上传)
项目引入阿里云视频点播PHP-SDK 背景:2021年乐视云的点播将停止提供服务,项目决定选择选用阿里云的视频的点播.在上线前,需要将之前的视频提前导入资源库,URLS方式拉取是比较方便的,对编辑同事 ...
- Spark性能调优九之常用算子调优
1.使用mapPartitions算子提高性能 mapPartition的优点:使用普通的map操作,假设一个partition中有1万条数据,那么function就要被执行1万次,但是使用mapPa ...
- python监控文件实时批量压缩脚本
# coding:utf-8 from shutil import make_archive import os import time # 指定需要监测的文件夹 image_path = './im ...
- AWVS批量导入网站(刷漏洞入门)
今天整了一天这个AWVS批量扫描脚本,主要是下了好几个版本的AWVS,都不稳定,一次次删除又一次次安装. 做这件事儿目的就是为了批量刷漏洞,不过弄好之后又不打算刷漏洞了,不太喜欢无脑刷漏洞,没什么意义 ...
- kali2020创建root用户
自kali更新到2020版后,默认取消了root用户的登录权限.只能用普通用户登录,这样做的优点在于对于kali的新手,在不懂的部分命令的情况下对系统的损害有所降低,也就说安全性提高了.但是普通用户权 ...