Это близко:
var findIt = 'Javascript';
$.expr[":"].containsNoCase = function(el, i, m) {
var search = m[3];
if (!search) return false;
// we'll use text to find what we want...
return eval("/" + search + "/ig").test($(el).text());
};
$("p:containsNoCase('"+ findIt +"')").each(function() {
// and then html when we are ready to replace
var ht = $(this).html();
var pos= ht.indexOf(findIt);
var start = ht.substring(0, pos);
var end = ht.substring(pos+findIt.length);
$(this).html(
start
+'<a href="javascript:alert(\'heartrate.cfm\')">'+findIt+'</a>'+end);
});
Но то, что вы ищете, трудно обеспечить. Вы хотите искать только текст элементов, но необходимо обновить содержимое HTML элемента, где он был найден (чтобы добавить ссылки). Когда вы вернетесь назад и воспользуетесь html () для обновления элемента, вы в конечном итоге замените вещи, которые вам не нужны.
Например, это нормально:
<p>Hey, Javascript is fun.</p>
Где, как это имеет проблемы:
<p><img src="something/Javascript.png">Whee, yaa Javascript</p>
Текст в изображении src заменен ошибочно. Если есть способ найти положение соответствующего текста внутри элемента, не окруженного тегом или внутри него, можно было бы заменить его чисто. Конечно, вы можете использовать text (), но тогда вы не сможете использовать какой-либо HTML в том, что вы добавляете обратно :(. Может быть, я проверю и посмотрю, есть ли у кого-нибудь еще что предложить.