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配置在第二小节 ...
随机推荐
- Panda Global发现,FATF关于区块链金融又发声
众所周知,FATF是一个由G7成员国在1989年在法国巴黎所成立的,具有国际反洗钱和反恐融资领域最具权威性的国际组织,全称叫金融行动特别工作组.2007年,中国而加入了该组织,迄今为止FATF成员已涵 ...
- 题解-CF755G PolandBall and Many Other Balls
题面 CF755G PolandBall and Many Other Balls 给定 \(n\) 和 \(m\).有一排 \(n\) 个球,求对于每个 \(1\le k\le m\),选出 \(k ...
- c++ 解析yaml文件
一直用c++操作ini做配置文件,想换成yaml,在全球最大的同性交友网站github上搜索,看有没有开源的库,功夫不负有心人,找到了yaml-cpp,用他解析了一个yaml的例子非常好使,分享一下如 ...
- JavaSE12-内部类&API
1. 参数传递 1.1 类名作为形参和返回值 1.类名作为方法的形参 方法的形参是类名,其实需要的是该类的对象 实际传递的是该对象的[地址值] 2.类名作为方法的返回值 方法的返回值是类名,其实返回的 ...
- IDEA创建maven项目很慢的问题解决方式
问题现象:刚转IDEA开发,发现创建maven项目,非常慢. 解决方式: 构建maven项目添加参数,要不然非常慢,会卡住-DarchetypeCatalog=internal 自动导入包,codin ...
- Cisco Packet Tracer NAT模拟实验
Cisco Packet Tracer NAT模拟实验 by: 铁乐猫 date: 2020-09-22 cisco packet tracer : 7.2.2 NAT简介 NAT允许将私有IP地址映 ...
- 面试 HTTP和HTML 浏览器
HTTP和HTML 浏览器 #说一下http和https #参考回答: https的SSL加密是在传输层实现的. (1)http和https的基本概念 http: 超文本传输协议,是互联网上应用最为广 ...
- [水题日常]UVA11181 条件概率(Probability|Given)
话说好久没写blog了 好好学概率论的第一天,这题一开始完全不会写,列出个条件概率的公式就傻了,后来看着lrj老师的书附带的代码学着写的- 因为我比较弱智 一些比较简单的东西也顺便写具体点或者是按照书 ...
- 多年总结IDEA 使用技巧 (建议收藏!)
很长一段时间没有更新了,前段时间转测试了,浪费了一些时间,终于可以写文章了,今天来写一下之前自己开发的一些习惯,因为自己本身自己是一个极简主义所以 开发喜欢这样:. 全屏显示 我们可以使用[Prese ...
- matlab中fminbnd函数求最小或者组大值
clc; clear all; close all; fx = @(x) -(0.4./sqrt(1 + x.^2) - sqrt(1+x.^2) .* (1- 0.4./(1 + x.^2))+x) ...