Ответ 1
$("h2:contains('cow')").html(function(_, html) {
return html.replace(/(cow)/g, '<span class="smallcaps">$1</span>');
});
Я хочу найти строку текста в элементе и обернуть вокруг него несколько тегов span. Например
От:
<h2>We have cows on our farm</h2>
Для того, чтобы:
<h2>We have <span class='smallcaps'>cows</span> on our farm</h2>
Я пробовал:
$("h2:contains('cow')").each(function() {
$(this).text().wrap("<span class='smallcaps'></span>");
});
Но это только оборачивает весь содержащий тег h2
.
$("h2:contains('cow')").html(function(_, html) {
return html.replace(/(cow)/g, '<span class="smallcaps">$1</span>');
});
Другой подход, разбитый по ключевому слову и соединение с обновленным html.
$("h2:contains('cow')").html(function(_, html) {
return html.split('cow').join("<span class='smallcaps'>cow</span>");
});
Примечание. Я не тестировал это, но я предполагаю, что это будет хуже, чем замена, но цифра, которую я буду включать в любом случае в информационных целях
Вот вариант ответа @undefined, который перебирает массив элементов:
var barnyardArray = [
'cow',
'horse',
'chicken',
'hog',
'goat',
'goose',
'duck',
'llama'
];
$.each(barnyardArray, function (index, value) {
$("p:contains(" + value + ")").html(function (_, html) {
var regex = new RegExp(value, 'g');
return html.replace(regex, '<span class="smallcaps">' + value + '</span>');
});
});
$("h2:contains('cow')").each(function() {
var newText = $(this).html().replace("cow", "<span class='smallcaps'></span>");
$(this).html(newText);
});
В моем случае у меня есть тег внутри целевого div и некоторый текст, который мне нужно обернуть в текст.
Это как я сделал следующее "Что вы пробовали".
var oldText = $(this).text(),
newText = $(this).html().replace(
oldText,
"<a class='k-link' href='#' class='smallcaps'>" +
oldText +
"<span class='k-icon k-i-arrow-n'></span></a>"
);
$(this).html(newText);