Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

aleckssubtil

Expressões Regulares Javascript travando a página.

Recommended Posts

Olá !

meu código está aqui:

http://jsfiddle.net/jgC67/1/

C
aso você digite no input no na área do "resultado" desse site ele fará o highlight corretamente, caso você de ctrl + A e digite outra coisa, novamente, tudo funcionará. Porém, caso você digite mais de uma palavra a página trava completamente.

 

Já vi, após milhares de testes e combinações que o problema está na expressão regular

 

" var mySplitResult = myString.split(/[\s]+/); "
pois, sem ela tudo funciona perfeitamente, porém, fará o highlight como um todo e não palavra por palavra, como eu desejo.

Palavra por palavra eu quero dizer, caso ele digite no Input "cafe sd", todas as instâncias de café e sd serão marcadas com o highlight e não todas as instâncias de "cafe sd".

 

Obrigado a todos, espero que consigam me ajudar.

 

Ou, caso exista outra forma de fazer isso, me avisem :b

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, o seu problema não é a expressão regular.

 

mas sim, outros diversos pontos no script.

Primeiro: não declare um plugin dentro de um evento

Segundo: cacheie seus elementos do DOM

 

Apenas organizei o código e funcionou:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>

<style>
.highlight { background: yellow;}
</style>
</head>
<body>

<input id="search" class="search" name="search" type="text" value="café a">
<p> café cafe cafE CAFE CAFÉ CAFÊ a asd asd       ds oas        koqwe mySplitResult[1]</p>



<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script src="jquery.highlight.js"></script>
<script src="all.js"></script>
</body>
</html>

Sendo o all.js:

//$(document).ready(function() {

function stripAccents(str) {
    var rExps=[
    {re:/[\xC0-\xC6]/g, ch:'A'},
    {re:/[\xE0-\xE6]/g, ch:'a'},
    {re:/[\xC8-\xCB]/g, ch:'E'},
    {re:/[\xE8-\xEB]/g, ch:'e'},
    {re:/[\xCC-\xCF]/g, ch:'I'},
    {re:/[\xEC-\xEF]/g, ch:'i'},
    {re:/[\xD2-\xD6]/g, ch:'O'},
    {re:/[\xF2-\xF6]/g, ch:'o'},
    {re:/[\xD9-\xDC]/g, ch:'U'},
    {re:/[\xF9-\xFC]/g, ch:'u'},
    {re:/[\xD1]/g, ch:'N'},
    {re:/[\xF1]/g, ch:'n'} ];
    for(var i=0, len=rExps.length; i<len; i++)
            str=str.replace(rExps[i].re, rExps[i].ch);
    return str;
};


$("body").on("keyup", "#search", function(e) {


    var $this = jQuery(this),
        $p = jQuery("p"),
        mySplitResult = $this.val().split(/\s+/),
        max = mySplitResult.length;


    $p.unhighlight();
    $p.highlight(mySplitResult);

});
//});

e o jquery.highlight.js o plugin em si, sem nenhuma alteração.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu William Bruno!

 

 

Primeiro: não declare um plugin dentro de um evento
Segundo: cacheie seus elementos do DOM

 

Vou prestar mais atenção nisso.

 

Muito obrigado pela ajuda.

 

Tenha uma boa semana. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.