Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [js]escludere tag

  1. #1

    [js]escludere tag

    'sera a tutti,

    ho questo problema...

    ho creato un motore di ricerca per un sito, tutto funziona egregiamente,PHP-javascript.

    javascript si occupa di rendere in grassetto le parole chiave e anche questo funziona in questo modo suggeritomi su questo forum

    codice:
    function grassetto (stringa,parola) { 
    
    myString = parola;
    splitString = myString.split(" ");
    
    for(i=0; i<splitString.length; i++){
    
    if(splitString[i].length < 3 ){i++;}
    
    RE = new RegExp("("+splitString[i]+")","gi")
    stringa = stringa.replace(RE,"<span class='motore'>$1</span>")
    }
    return document.write(stringa);
    }
    
    il mio problema sta nel fatto che esegue il controllo anche dentro i <trag>, sapreste dirmi come posso evitare che il controllo avvenga anche dentro ai tag ?
    
    grazie infinite
    
    SK

  2. #2
    Non garantisco cmq prova con questa:
    codice:
    RE = new RegExp ('((?:^|>)[^<]*)('+splitString[i]+')(?![^<]*>)','gi')
    stringa = stringa.replace(RE,"$1<span class='motore'>$2</span>")
    di sicuro cmq non copre un caso del genere
    codice:
    ... <a title=">parola_da_cercare<">...
    se la copi premi quote che la visualizzazione mette degli spazi non voluti tra > e ).
    dA .. foto di viaggio
    L'esperienza è il tipo di insegnante più difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  3. #3
    Ho provato, ma non mi stampa + nulla a video

    sto impazzendo

  4. #4
    up

  5. #5
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    trovare una sola regular expression per fare sta cosa mi sembra un po' complicato :master:
    c'ho anche pensato parecchio e fatto alcune prove ma niente
    a questo punto si potrebbe fare con 2 re
    una per mettere il tag con class=motore a tutte le parole che trovi
    e una per toglierlo dalle parole all'interno di tag
    codice:
    function Grassetto(stringa,parola){
      var re = new RegExp('(^|[\.,:; >])('+parola+')([\.,:; <]|$)','ig')
      stringa2 = stringa.replace(re,'$1<span class="motore">$2</span>$3');
      re = new RegExp('(<[^<>]*?)<span class="motore">('+parola+')</span>([^<>]*?>)','ig');
      stringa2 = stringa2.replace(re,'$1$2$3');
      return stringa2
    }
    facce sape'

  6. #6
    Originariamente inviato da willybit
    trovare una sola regular expression per fare sta cosa mi sembra un po' complicato :master:
    c'ho anche pensato parecchio e fatto alcune prove ma niente
    a questo punto si potrebbe fare con 2 re
    una per mettere il tag con class=motore a tutte le parole che trovi
    e una per toglierlo dalle parole all'interno di tag
    codice:
    function Grassetto(stringa,parola){
      var re = new RegExp('(^|[\.,:; >])('+parola+')([\.,:; <]|$)','ig')
      stringa2 = stringa.replace(re,'$1<span class="motore">$2</span>$3');
      re = new RegExp('(<[^<>]*?)<span class="motore">('+parola+')</span>([^<>]*?>)','ig');
      stringa2 = stringa2.replace(re,'$1$2$3');
      return stringa2
    }
    facce sape'
    Willybit sei un mito vivente....

    la prossima volta che ci si incontra, ricordati che hai una cena pagata

    grazie infinite

    SK

  7. #7


    sorry, ma ho ancora un piccolo problema....spero

    funziona tutto, solo che a differenza di prima, quando mettevo 2 termini di ricerca o anche 3 mi evidenziava tutti i termini, ora se metto per esempio "pippo" lo trova e lo evidenzia....se metto "pippo pluto" li trova, ma non evidenzia nulla, lo fa solo se il termine è uno solo....

    come posso rimettere questa funzionalità ?

    ho provato in questo modo

    codice:
    function grassetto (stringa,parola) { 
    
    myString = parola;
    splitString = myString.split(" ");
    
    for(i=0; i<splitString.length; i++){
    
    if(splitString[i].length < 3 ){i++;}
    
      var re = new RegExp("(^|[\.,:; >])("+splitString+")([\.,:; <]|$)","gi")
      stringa2 = stringa.replace(re,"$1<span class='motore'>$2</span>$3");
      re = new RegExp("(<[^<>]*?)<span class='motore'>("+splitString+")</span>([^<>]*?>)","gi");
      stringa2 = stringa2.replace(re,"$1$2$3");
    
    }
    return document.write(stringa2);
    }
    ma senza risultati...qualche dritta ?

  8. #8


    c'è qualcosa che non va....

    nelle varie prove che sto facendo, ho notato che:

    se cerco una parola del tipo "sito" ed nel testo ho un immagine linkata a "www.miosito.com/immagini/img.jpg", la ricerca funziona ed ottengo quello che voglio, mi evidenzia le varie parole "sito" evitando di spezzarmi il tag dell'immagine che contiene "miosito", se però io cerco "miosito" il problema originario persiste, nel senso che mi si ripresenta il problema iniziale, il tag viene spezzato e non si vede + l'immagine, è come se in questo caso cerchi la parola distinta evitando quelle simili, ma non fa nulla di diverso

    una cosa che forse mi ero dimenticato di dire è che il lavoro di ricerca viene fatto in coppia con php, ovvero io inserisco la/le parole chiave, invio la query che ricerca nel db tutti i record che contengono almeno una parola chiave, per renderle evidenziate con la classe "motore" ho dovuto ricorrere a javascript perche in php la funzione di replece è case sensitive, quindi mi evidenziava solo le parole esattamente uguali in tutto e per tutto, con javascript ho risolto questo problema ma come dicevo, mi sono trovato difronte a questa nuova magagna dei tag, dato che il cliente vuole poter inserire (per es. nelle news), immagini nel testo a piacimento e altri tag di formattazione del testo, così facendo nasce il problema fatale

    ora, non essendo mai riuscito a fare espressioni regolari che superassero un grado di difficoltà pari a 0,1 (non riesco a farmele entrare in testa), mi domando, se con:

    codice:
    function grassetto (stringa,parola) { 
    
    myString = parola;
    splitString = myString.split(" ");
    
    for(i=0; i<splitString.length; i++){
    
    if(splitString[i].length < 3 ){i++;}
    
    RE = new RegExp("("+splitString[i]+")","gi")
    stringa = stringa.replace(RE,"<span class='motore'>$1</span>")
    }
    return document.write(stringa);
    }
    tutto funzionava con una o + parole chiave e anche co parole parziali tipo chiave="tipo" evidenziava sia tipo che per esempio tipografia e l'unico problema era appunto quello relativo ai tag...

    guardando lo script di willybit noto che è stata modificata anche la prima parte, ovvero quella che dovrebbe evidenziare le parole rispetto la parola chiave, che differenza c'è sostanzialmente tra una e l'altra ?

    non si riesce ad implementare quella con la seconda RegExp per eliminare i tag indesiderati ?

    non so + dove sbattere la mia zucca vuota

    Grazie

  9. #9
    sempre io

    ho riprovato facendo un attimo + di attenzione ed implementando la RegExp di Anªkin ed ho notato che funziona, non taglia i tag ed evidenzia anche quando metto + chiavi...tutto ok

    mi sparo altre mille prove e vi faccio sapere


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.