是否有可能与"The <strong>dog</strong> is really <em>really</em> fat!“中的”狗真的很胖“相匹配,并在它周围加上"<span class="highlight">WHAT WAS MATCHED</span>”?
我不是专门指这一点,但通常可以忽略HTML搜索文本,将其保存在最终结果中,只需在上面添加所有内容?
编辑:
考虑到HTML标记重叠的问题,是否可以匹配一个短语,并在每个匹配的单词周围添加跨度?这里的问题是,我不想让“狗”这个词在没有搜索的情况下匹配,在这里,“狗真的很胖”。
发布于 2011-09-07 19:40:08
更新:
这是一个能做你想做的工作的小提琴。但是,您需要更新htmlTagRegEx来处理任何HTML标记上的匹配,因为这只是执行一个简单的匹配,而不是处理所有的情况。
http://jsfiddle.net/briguy37/JyL4J/
此外,下面是代码。基本上,它一个一个地取出html元素,然后在文本中进行替换,在匹配的选择周围添加突出显示范围,然后逐个推回html元素。很难看,但这是我能想到的最简单的办法.
function highlightInElement(elementId, text){
var elementHtml = document.getElementById(elementId).innerHTML;
var tags = [];
var tagLocations= [];
var htmlTagRegEx = /<{1}\/{0,1}\w+>{1}/;
//Strip the tags from the elementHtml and keep track of them
var htmlTag;
while(htmlTag = elementHtml.match(htmlTagRegEx)){
tagLocations[tagLocations.length] = elementHtml.search(htmlTagRegEx);
tags[tags.length] = htmlTag;
elementHtml = elementHtml.replace(htmlTag, '');
}
//Search for the text in the stripped html
var textLocation = elementHtml.search(text);
if(textLocation){
//Add the highlight
var highlightHTMLStart = '<span class="highlight">';
var highlightHTMLEnd = '</span>';
elementHtml = elementHtml.replace(text, highlightHTMLStart + text + highlightHTMLEnd);
//plug back in the HTML tags
var textEndLocation = textLocation + text.length;
for(i=tagLocations.length-1; i>=0; i--){
var location = tagLocations[i];
if(location > textEndLocation){
location += highlightHTMLStart.length + highlightHTMLEnd.length;
} else if(location > textLocation){
location += highlightHTMLStart.length;
}
elementHtml = elementHtml.substring(0,location) + tags[i] + elementHtml.substring(location);
}
}
//Update the innerHTML of the element
document.getElementById(elementId).innerHTML = elementHtml;
}发布于 2011-09-07 19:24:23
娜雅..。只需使用好的旧RegExp ;)
var htmlString = "The <strong>dog</strong> is really <em>really</em> fat!";
var regexp = /<\/?\w+((\s+\w+(\s*=\s*(?:\".*?"|'.*?'|[^'\">\s]+))?)+\s*|\s*)\/?>/gi;
var result = '<span class="highlight">' + htmlString.replace(regexp, '') + '</span>';发布于 2016-02-19 19:39:58
使用JQuery的一种更简单的方法是。
originalHtml = $("#div").html();
newHtml = originalHtml.replace(new RegExp(keyword + "(?![^<>]*>)", "g"), function(e){
return "<span class='highlight'>" + e + "</span>";
});
$("#div").html(newHtml);这对我来说很好。
https://stackoverflow.com/questions/7339157
复制相似问题