Javascript 忽略突出显示搜索文本的URL
我有一个javascript,比如:Javascript 忽略突出显示搜索文本的URL,javascript,jquery,css,html,Javascript,Jquery,Css,Html,我有一个javascript,比如: <script type="text/javascript"> function getHighlight() { var MainText = ''; var toSearch = 'store'; MainText = MainText + '<table>'; MainText = MainText + '&l
<script type="text/javascript">
function getHighlight() {
var MainText = '';
var toSearch = 'store';
MainText = MainText + '<table>';
MainText = MainText + '<tr><td><b>Stores</b></td></tr>';
MainText = MainText + '<tr><td class="clsUrl"><a href="check%20Store%20quality.aspx" style="color:blue; text-decoration:none;" target="_blank">check%20Store%20quality.aspx</a></td></tr>';
MainText = MainText + '<tr><td><p>Some Description about store...</p><br /></td></tr>';
MainText = MainText + '</table>';
$('.dv_searchResult').append(MainText);
textHightLight($(".dv_searchResult").html(), toSearch, ".dv_searchResult");
}
function textHightLight(totText, term, dvCls) {
var src_str = totText;
term = term.replace(/(\s+)/, "(<[^>]+>)*$1(<[^>]+>)*");
var pattern = new RegExp("(" + term + ")", "gi");
src_str = src_str.replace(pattern, "<mark>$1</mark>");
src_str = src_str.replace(/(<mark>[^<>]*)((<[^>]+>)+)([^<>]*<\/mark>)/, "$1</mark>$2<mark>$4");
$(dvCls).html(src_str);
}
</script>
函数getHighlight(){
var MainText='';
var-toSearch='store';
MainText=MainText+“”;
MainText=MainText+“存储区”;
MainText=MainText+“”;
MainText=MainText+'关于商店的一些描述…
;
MainText=MainText+“”;
$('.dv_searchResult').append(MainText);
textHightLight($(“.dv_searchResult”).html(),用于搜索“.dv_searchResult”);
}
功能文本HightLight(totText、term、dvCls){
var src_str=totText;
术语=术语。替换(/(\s+)/,“(]+>)*$1(]+>)*”;
var模式=新的RegExp(“(“+术语+”),“gi”);
src_str=src_str.replace(模式,“$1”);
src_str=src_str.replace(/([^]*)((]+>)+)([^]*)/,“$1$2$4”);
$(dvCls).html(src_str);
}
在这里,我将完整的html绑定到一个divdv_searchResult
,然后突出显示div中的toSearch
文本。
在某种程度上,它工作得很好。唯一的问题是,如果toSearch
文本包含url中也存在的任何单词(例如,在上面的文本中,store
存在于href=“check%20Store%20quality.aspx”
中),则url也将替换为我用来突出显示该单词的
。
我需要有关如何忽略clsUrl
类或
请帮忙。好的,经过大量研究,我为您的问题找到了一个解决方案:
$('input[type=submit]').click( function() {
var MainText = '';
var toSearch = 'store';
MainText = MainText + '<table>';
MainText = MainText + '<tr><td><b>Stores</b></td></tr>';
MainText = MainText + '<tr><td class="clsUrl"><a href="check%20Store%20quality.aspx" style="color:blue; text-decoration:none;" target="_blank">check%20Store%20quality.aspx</a></td></tr>';
MainText = MainText + '<tr><td><p>Some Description about store...</p><br /></td></tr>';
MainText = MainText + '</table>';
$('.dv_searchResult').append(MainText);
textHightLight($(".dv_searchResult"), toSearch, ".dv_searchResult");
//instead of sending html to textHightLight function just send the whole element
});
function textHightLight(totText, term, dvCls) {
a=$(totText).find('a').detach();//Just detach anchor tag from table for time being and keep a copy of it to attach it back on later part.
var src_str = $(totText).html();//Once done take the html and start searching
var childNodes = document.body.childNodes;
term = term.replace(/(\s+)/, "(<[^>]+>)*$1(<[^>]+>)*");
var pattern = new RegExp("(" + term + ")", "gi");
src_str = src_str.replace(pattern, "<mark>$1</mark>");
src_str = src_str.replace(/(<mark>[^<>]*)((<[^>]+>)+)([^<>]*<\/mark>)/, "$1</mark>$2<mark>$4");
$(dvCls).html(src_str);
if(a)//Once search is done attach the particular tag back to the place where it was.
//If you don't want to display it in result just comment this part of code from if
{
$('.clsUrl').append(a);
}//till here
}
这是你能提供一把小提琴吗???@GuruprasadRao我已经添加了小提琴。请选中,以便您只想避免使用a
的href或完整的a
标记??我希望避免使用完整的“a”标记。但是这两个人中的任何一个都可以。谢谢@Guruprasad Rao…工作得很有魅力。正是我所需要的。:)我的荣幸。我对此更感兴趣,我编辑了我的答案,我觉得这是一个更好的方法。看一看……)快乐编码…)
function textHightLight(totText, term, dvCls) {
var clas=$(totText).attr('class');
var elem=$('div.'+clas+' table tr td:not(:has(a))');
var src_str = "";
$.each(elem,function(index,value){
src_str+=$(value).html();
});
term = term.replace(/(\s+)/, "(<[^>]+>)*$1(<[^>]+>)*");
var pattern = new RegExp("(" + term + ")", "gi");
src_str = src_str.replace(pattern, "<mark>$1</mark>");
src_str = src_str.replace(/(<mark>[^<>]*)((<[^>]+>)+)([^<>]*<\/mark>)/, "$1</mark>$2<mark>$4");
$(dvCls).html(src_str);
}