Я пытаюсь создать функцию текстового поиска, но мне трудно заставить ее работать, когда внутри элемента находится html. Вот несколько простых html, чтобы продемонстрировать мою проблему.Замените текст внутри элемента текстом, содержащим html, без удаления html уже присутствующего
<b>
<input type="checkbox" value="" />
I need replaced
</b>
И вот где я сейчас нахожусь для javascript. Он отлично работает, полагая, что внутри нет html.
$("*", search_container).each(function() {
var replaceTxt = $(this).text().replace(new RegExp("(" + search_term + ")", 'i'), '<span style="color: #0095DA;" class="textSearchFound">$1</span>');
$(this).text().replaceWith(replaceTxt);
});
Как пользователь печатает, мне нужно заменить текст на span. Таким образом, контент должен выглядеть следующим образом.
<b>
<input type="checkbox" value="" />
<span style="color: #0095DA" class="textSearchFound">I need</span> replaced
</b>
UPDATE
Осмотрев вопрос, который был признан дубликат я придумал это. Который может быть близок, он вставляет html в DOM как текст, который я не хочу. Пожалуйста, проголосуйте, чтобы открыть его снова.
$("*", search_container).each(function() {
var node = $(this).get(0);
var childs = node.childNodes;
for(var inc = 0; inc < childs.length; inc++) {
//Text node
if(childs[inc].nodeType == 3){
if(childs[inc].textContent) {
childs[inc].textContent = childs[inc].textContent.replace(new RegExp("(" + search_term + ")", 'i'), '<span style="color: #0095DA;" class="textSearchFound">$1</span>');
}
//IE
else {
childs[inc].nodeValue = childs[inc].nodeValue.replace(new RegExp("(" + search_term + ")", 'i'), '<span style="color: #0095DA;" class="textSearchFound">$1</span>');
}
}
}
});
Является ли это использовать на странице вы можете контролировать HTML для, или более общий случай, когда вы хотите, чтобы иметь возможность заменить текст, и у вас нет контроля над структурой html? –
@JasonAller Более общая причина. Мне нужно, чтобы это работало при любых условиях, когда я не знаю, что будет в элементах. – Metropolis
Возможно, попробуйте этот плагин? http://bartaz.github.io/sandbox.js/jquery.highlight.html –