Хорошо, я обновил этот вопрос улучшенным кодом из ответов и комментариев ниже и более похож на реальный проект.Но все же это не работает в IE8. скрипка здесь
<ul id="definitions">
<li id="defid63">keyword1<input type="hidden" value="63" /></li>
<li id="defid61">keyword2<input type="hidden" value="61" /></li>
<li id="defid62">Keyword3<input type="hidden" value="62" /></li>
</ul>
<div id="html">Lorem ipsum keyword1 dolor keyword2 sit keyword3 amet, consectetur adipisicing elit, sed do eiusmod tempor</div>
У меня есть список (ul > li
) ключевых слов, и есть строка с текстом.Я хочу обернуть каждое вхождение ключевого слова тегом <a>
.У меня есть код, который отлично работает в Firefox и Chrome, но IE (8) как-то не соответствует регулярному выражению.
jQuery(function($) {
// created by Gracenotes
// http://goo.gl/MTkcY
RegExp.quote = function(str) {
return str.replace(/([.?*+^$[\]\\(){}-])/g, "\\$1");
};
var $node = $('#html'),
// the dom element
html = $node.html(); // the text we'll manipulate
$('#definitions li').each(function() {
var defid = $(this).find('input').val(),
deftext = $(this).html().split("<input")[0],
//the keyword
//pattern = eval('/\\b('+RegExp.quote(deftext)+')\\b/gi');
pattern = new RegExp('\\b(' + RegExp.quote(deftext) + ')\\b', 'gi');
html = html.replace(pattern, '<a href="#id=' + defid + '">$1</a>');
});
// replace the dom content with our updated text
$node.html(html);
});