2016-05-09 15 views
-3

Ich versuche JavaScript zu verwenden, um Übereinstimmungen mit regulären Ausdrücken in Echtzeit hervorzuheben. Ähnlich wie bei Websites wie http://regexr.com/Live regulärer Ausdruck Hervorhebung

<p id="haystack"> Sample text Sample Text Sample Text Sample Text </p> 

    <form> 
     <input id="needle" onkeyup="highlight('haystack')" onkeydown="highlight('haystack')" type="text" placeholder="Enter Pattern" autofocus> 
    </form> 


function highlight(e){ 

    var pattern = document.getElementById('needle'); 

    var consoleText = document.getElementById('haystack').innerHTML; 

    consoleText = consoleText.replace(pattern.value,"replaced"); 

    document.getElementById('haystack').innerHTML = consoleText; 

Ich bin sehr neu in JavaScript. Wie kann ich den gewünschten Effekt erzielen?

Antwort

0

Versuchen Sie folgendes:

function highlight(container,what,spanClass) { 
    var content = container.innerHTML, 
     pattern = new RegExp('(>[^<.]*)(' + what + ')([^<.]*)','g'), 
     replaceWith = '$1<span ' + (spanClass ? 'class="' + spanClass + '"' : '') + '">$2</span>$3', 
     highlighted = content.replace(pattern,replaceWith); 
    return (container.innerHTML = highlighted) !== content; 
} 

Verbrauch:

highlight(document.getElementById('content'),'hello','highlight'); 
+0

Vielen Dank, ich werde versuchen, präziser in Zukunft –

+0

werden mit 'innerHTML' Übel ist !!! Verwenden Sie stattdessen ein bestehendes Plugin wie [mark.js] (https://markjs.io/). – dude