反应搜索高亮
React search highlighing
我正在尝试进行搜索,突出显示显示列表中匹配的字符。
我有麻烦弄清楚如何在列表中添加DOM节点,因为它正在创建/更新。下面的代码是我得到的。我想我明白为什么它不起作用(我一直得到'Stephine Ma[object object]ks'作为输出)。我很确定我需要添加它作为一个实际的DOM节点使用。html或。innerhtml,但与反应我不知道如何做到这一点。
import React from 'react';
import { Router, Route, Link } from 'react-router';
export default class extends React.Component {
constructor(props) {
super(props);
this.state = {};
}
render() {
var divImage = {
backgroundImage : "url(" + this.props.image + ")"
};
var test = this.props.name;
if(this.props.name.indexOf(this.props.filterText) != -1 ) {
var pattern = this.props.filterText.toString();
test = test.replace(pattern, <span className="highlight">+pattern+</span>)
}
return (
<li className="panelItem">
<a className="item-title" style={divImage}>{test}</a>
</li>
);
}
}
这里是一个例子,如果你可以使用indexOf而不是正则表达式匹配。构建所有节点并将它们封装在span中。
https://jsfiddle.net/2zx84koy/var Hello = React.createClass({
render: function() {
var name = this.props.name;
var startIdx = name.indexOf(this.props.filterText);
var textNodes = <span>{name}</span>
if(startIdx > -1 ) {
textNodes = (
<span>
{name.substring(0, startIdx)}
<span className="highlight">{name.substring(startIdx, startIdx + this.props.filterText.length)}</span>
{name.substring(startIdx + this.props.filterText.length)}
</span>
)
}
return (
<li className="panelItem">
<a className="item-title">{textNodes}</a>
</li>
);
}
});
你可以在react中做innerHTML,但通常不建议这样做,除非你确定它不会让你容易受到xss攻击。我在下面放了一个如何将代码转换为这种风格的示例,仅供参考。
var test = this.props.name;
if(this.props.name.indexOf(this.props.filterText) != -1 ) {
var pattern = this.props.filterText.toString();
test = test.replace(pattern, '<span class="highlight">' + pattern + '</span>')
}
return (
<li className="panelItem">
<a className="item-title" dangerouslySetInnerHTML={{__html: test}}></a>
</li>
);
我最近在做类似的事情,我为它创建了一个库(prelude-extension)和一个组件(react-selectize),这里是一个演示,也许它是你正在寻找的
相关文章:
- 从桌面读取python文件时高亮显示代码
- 高亮显示时编辑文本大小和颜色
- Angularjs-utils高亮过滤器在搜索时破坏应用程序
- 高亮显示与数组字符串一起使用时文本插件中断
- FF视图源|脚本高亮显示为红色
- 父页面的角度路由器导航高亮显示
- OpenLayers在悬停时高亮显示功能,并在单击时选择
- 当DIV中的文本高亮显示时,如何获得DIV中Span的值?(Javascript)
- 延迟高亮显示文本区域中的文本
- Mootools:如何在点击时保持元素高亮显示并停止所有事件
- 高亮显示单击菜单链接
- 在字符串列表中搜索任何出现的单词,如果单词的第一个字符匹配,则高亮匹配单词.Javascript正则表达式
- Firefox-当不在输入控件上时隐藏焦点高亮显示
- Javascript:搜索和高亮显示包括HTML标记
- 基于搜索文本高亮显示图像地图的区域
- 反应搜索高亮
- 通过搜索查找文本并高亮显示错误
- Angular2搜索关键词高亮显示
- 将字符串中找到的单词替换为大小写敏感(搜索和高亮显示)
- Javascript选项卡搜索框选项卡高亮显示