Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Problema con RegExp

  1. #1
    Utente bannato
    Registrato dal
    Aug 2009
    Messaggi
    350

    Problema con RegExp

    Ciao ragazzi,

    Ho finito di leggere la guida base di javascript come da voi consigliatami e stavo cercando di decifrare il codice seguente:

    codice:
    sfHover = function() {
      var sfEls = document.getElementById("nav").getElementsByTagName("LI");
      for (var i=0; i<sfEls.length; i++) {
        sfEls[i].onmouseover=function() {
          this.className+=" sfhover";
        }
        sfEls[i].onmouseout=function() {
          this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
        }
      }
    }
    if (window.attachEvent) window.attachEvent("onload", sfHover);
    Ma non riesco a capire un paio di cose:
    1) Che significato ha \\b? Sul manuale c'é scritto che \b serve per dire al browser "guarda che sfhover é l'ultima di tette le classi assegnate all'oggetto LI!". Nel codice però ci sono 2 stanghette e per di più il file funziona uguale anche senza "\\b".
    2) Perché nel codice che ho trovato si scrive:
    if (window.attachEvent) {window.attachEvent("onload", sfHover);} invece di if (window.attachEvent) window.attachEvent("onload", sfHover); quando nella guida che ho letto c'era scritto di metterle sempre? E' una dimenticanza oppure si possono omettere quando c'é un solo comando dopo il test?
    3) Perché list-item é scritto maiuscolo invece di minuscolo? Una bella proprietà di getElementsByTagName oppure una distrazzione sopportata da ie5 e ie6, browser per i quali é stato scritto appositamente quel codice?

    Mille grazie come sempre

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924

    Re: Problema con RegExp

    Originariamente inviato da esacerbare
    1) Che significato ha \\b? Sul manuale c'é scritto che \b serve per dire al browser "guarda che sfhover é l'ultima di tette le classi assegnate all'oggetto LI!". Nel codice però ci sono 2 stanghette e per di più il file funziona uguale anche senza "\\b".
    \\b è l'escape di \b e indica fine della parola (non necessariamente dev'essere l'ultima parola)

    Originariamente inviato da esacerbare
    2) Perché nel codice che ho trovato si scrive:
    if (window.attachEvent) {window.attachEvent("onload", sfHover);} invece di if (window.attachEvent) window.attachEvent("onload", sfHover); quando nella guida che ho letto c'era scritto di metterle sempre? E' una dimenticanza oppure si possono omettere quando c'é un solo comando dopo il test?
    Se intendi le parentesi graffe, sì si possono omettere per una singola istruzione ma è bene usarle per rendere il codice più leggibile

    Originariamente inviato da esacerbare
    3) Perché list-item é scritto maiuscolo invece di minuscolo? Una bella proprietà di getElementsByTagName oppure una distrazzione sopportata da ie5 e ie6, browser per i quali é stato scritto appositamente quel codice?
    il codice filtra già IE quando usa attachEvent().
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  3. #3
    Utente bannato
    Registrato dal
    Aug 2009
    Messaggi
    350

    Re: Re: Problema con RegExp

    Originariamente inviato da fcaldera
    \\b è l'escape di \b e indica fine della parola (non necessariamente dev'essere l'ultima parola)


    Se intendi le parentesi graffe, sì si possono omettere per una singola istruzione ma è bene usarle per rendere il codice più leggibile



    il codice filtra già IE quando usa attachEvent().
    Perché dici che \\b è l'escape di \b? Se scrivo:
    <script type="text/javascript">
    document.write(escape("\b"));
    </script>
    ottengo %08!
    Se scrivo:
    <script type="text/javascript">
    document.write(unescape("\\b"));
    </script>
    ottengo \b però questo discorso cosa centra con il codice? A cosa serve dire che la parola finisce li?!?!

    Visto la tua considerazione aggiungo le parentesi perché mi piacciono di più!

    Nel terzo caso cosa intendi dire? Javascript é casesensitive, come fa a non confondere li con LI?

    Grazie fcaldera!

  4. #4
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924

    Re: Re: Re: Problema con RegExp

    Originariamente inviato da esacerbare
    Perché dici che \\b è l'escape di \b? Se scrivo:
    ...

    nel linguaggio corrente, fare escape non significa usare la funzione globale escape()
    significa anteporre una backslash a \b che altrimenti in quel contesto verrebbe considerata come una stringa


    Originariamente inviato da esacerbare
    ottengo \b però questo discorso cosa centra con il codice? A cosa serve dire che la parola finisce li?
    se il tuo elemento (fatalità!) avesse gia una classe "sfHoverqualcosa" e tu non mettessi la sequenza di fine parola, l'espressione regolare considererebbe quella come classe da rimuovere (invece della classe 'sfHover')

    Originariamente inviato da esacerbare
    Nel terzo caso cosa intendi dire? Javascript é casesensitive, come fa a non confondere li con LI?
    Nel terzo caso ho scritto che l'handler sarà richiamato solo su explorer dal momento che attachEvent() vale solo per Explorer. I browser w3c compatibili usano addEventListener().

    Sinceramente non mi ricordo se i browser sono tutti tolleranti e ti accettano anche tag maiuscoli.
    Abituati comunque a scriverli in minuscolo
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  5. #5
    Utente bannato
    Registrato dal
    Aug 2009
    Messaggi
    350

    Re: Re: Re: Re: Problema con RegExp

    Originariamente inviato da fcaldera
    ...

    nel linguaggio corrente, fare escape non significa usare la funzione globale escape()
    significa anteporre una backslash a \b che altrimenti in quel contesto verrebbe considerata come una stringa




    se il tuo elemento (fatalità!) avesse gia una classe "sfHoverqualcosa" e tu non mettessi la sequenza di fine parola, l'espressione regolare considererebbe quella come classe da rimuovere (invece della classe 'sfHover')



    Nel terzo caso ho scritto che l'handler sarà richiamato solo su explorer dal momento che attachEvent() vale solo per Explorer. I browser w3c compatibili usano addEventListener().

    Sinceramente non mi ricordo se i browser sono tutti tolleranti e ti accettano anche tag maiuscoli.
    Abituati comunque a scriverli in minuscolo
    codice:
    mille grazie!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.