2016-08-15 1 views
0

Вот мой HTMLJQuery, если входное значение соответствует символу в DIV

<input type="text" /> 
<div> 
    <p>Apple</p> 
    <p>Peach</p> 
    <p>Bannana</p> 
    <p>Tomato</p> 
</div> 

И мой код JQuery еще

var items = $("div").find("p").text(); 

console.log(items); 

Как я могу выделить каждый символ внутри сНа р, соответствующее значение на входе? Предположим, что пользователи записывают входной символ «a». Страница должна выглядеть так, даже символ в яблоке должен быть смелым.

A pple

Пе ч

В пп п

Том к

здесь codepen а

+0

Пожалуйста, включите пытавшихся решения, почему они не работают, а также ожидаемые результаты. Это действительно поможет нам разобраться с вашим кодом. Благодаря! –

+0

Человек, есть тонны ответов здесь, на SO. Вы можете взглянуть на [mark.js] (https://markjs.io) – dude

ответ

0

Один из вариантов:

// Borrowed from: 
// http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript#answer-3561711 
function escapeRegex(str) { 
    return str.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); 
} 

var items = $("div").find("p"); 

$('input').on('keyup', function() { 
    var reg = new RegExp('(' + escapeRegex(this.value) + ')', 'gi'); 
    items.html(function() { 
     return this.textContent.replace(reg, "<b>$1</b>"); 
    }); 
}); 

Обратите внимание, что выше ответ предполагает (на основе публикуемых разметок), что p элементов имеют только содержание текста. Если элементы p имеют дочерние элементы, то другой вариант следует рассматривать как фрагмент кода, который может иметь побочные эффекты и создать недействительный разметка.

https://jsfiddle.net/xbqetxdo/

+0

Использование innerHTML - зло, уничтожит события и инициирует регенерацию DOM – dude

+0

@ dude Да, в некоторых случаях, изменение свойства 'innerHTML' элемент 'body', например, является, конечно, ужасной идеей. Но вышеупомянутый ответ каким-то образом изменяет _textContent_ элемента, он предполагает (на основе размещенной разметки), что элементы 'p' имеют только текстовое содержимое, и вы не можете привязывать обработчики событий к текстовым узлам в конце концов, правильно? Таким образом, вы не потеряете в этом случае обработчиков событий, также этот вопрос не связан с привязками событий, а для динамических элементов можно использовать делегирование событий. – undefined

Смежные вопросы