我想突出显示文档中所有出现的单词。为此,我编写了以下代码:
function highlight_search_param() {
// get the search_param from location.search
filters = location.search.substr(1).split('&')
search_param = ''
for (i in filters) {
param = filters[i].split('=')
if (param[0] == 'q') {
search_param = param[1];
break;
}
}
if (search_param == '') return True
alert(search_param)
// convert into many possible cases
title_search_param = search_param = search_param[0].toUpperCase() + search_param.substring(1)
$('.summary-block').contents().find(':contains("'+search_param+'"),:contains("'+search_param.toLowerCase()+'"),:contains("'+title_search_param+'"),:contains("'+search_param.toUpperCase()+'")').each(function(){
if($(this).text().indexOf(search_param)>=0) {
$(this).html($(this).text().replace(search_param, "<span class='highlight'>" + search_param +"</span>"));
}
})
}
现在,由于我写完了text()
, span 显示为文本。(明显地)
如果我重写了html()
,则有可能会删除其他元素(该文本节点的兄弟姐妹)。
笔记。
- 页面中有很多
$('.summary-block
) - 搜索应该不区分大小写,但替换应该保持大小写不变
search_param
内部可能出现不止一次summary block
基本上,我正在寻找类似于ctrl+F
浏览器行为的东西
(小提琴)[http://jsfiddle.net/bYhxs/]