Это близко:
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>
Текст в ГКЗ изображения заменяется errantly. Если есть способ найти позицию совпадающего текста внутри элемента, не окруженного тегом или внутри него, его можно будет заменить чисто.Конечно, вы можете использовать text(), но тогда вы не можете использовать какой-либо HTML в том, что вы добавляете обратно :(Возможно, я вернусь и посмотрю, есть ли у кого-нибудь еще что-нибудь предложить.
Аналогичный вопрос http://stackoverflow.com/questions/247479/jquery-text-to-link-script – TStamper