我的查询结果集中有一个类似p12200
的字符串。用户搜索p-122-0
或p122-0
在搜索文本中的任何位置嵌入破折号,但我想突出显示前端的p1220
文本。我在数据库中使用replace关键字,它返回正确的结果集,但我突出显示结果集。
我的颜色突出显示功能是:
function strreplace($searchstring, $result) {
if(stripos($searchstring,'-')===false) return str_ireplace($searchstring, "<span class='highlightcolor'>".$searchstring."</span>", $result);
else {
if(stripos($result,'-')===false) return str_ireplace(str_ireplace('-','',$searchstring), "<span class='highlightcolor'>".str_ireplace('-','',$searchstring)."</span>", $result);
elseif(stripos($result,'-')!==false) return str_ireplace(str_ireplace('-','',$searchstring), "<span class='highlightcolor'>".$searchstring."</span>", $result);
}
}
请建议我的代码是否有任何错误。
答案 0 :(得分:0)
function highlight(str, className) {
jQuery( "#resultcontainer td" ).each(function() {
var val = jQuery(this).text();//get the string value
var match='';
if(val.toLowerCase().indexOf(str.toLowerCase())!==-1)
{
match = val.substr(val.toLowerCase().indexOf(str.toLowerCase()),str.length);
}
else if(val.replace(/\-/g,'').toLowerCase().indexOf(str.replace(/\-/g,'').toLowerCase())!==-1)
{
match = getMatch (val,str.replace(/\-/g,''),'');
}
if(match!=''){
var regex = new RegExp("("+match+")", "gi");
var n = val.replace(regex,"<span class='"+className+"'>"+match+"</span>"); //replace the match with highlight color
jQuery(this).html(n);
}
});
}
function getMatch(string,searchString,match)
{
var i = searchString.length;
var m = string.length;
var j = 0;
var stringarray = string.split("");
var searcharray = searchString.split("");
for(var k=0;k<i;k++){
if(j>=m) break;
for(;j<m;j++){
if(k>=i) return match;
if(searcharray[k] == stringarray[j]) {
if(match=='-' || match=='') {var l = j;} // sotre the first match index value
match = match+stringarray[j];
k++;
}
else if(stringarray[j]=='-'){
match = match+stringarray[j];
}
else {
if(match!='' && match!=='-')
j = l;
match = '';
k = 0;
}
}
}
return match;
}
jQuery(document).ready(function() {
highlight("p-1-22-0", "highlightcolor");
});