Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Replace e numeri

  1. #1

    Replace e numeri

    Salve a tutti, ho il seguente codice:

    codice:
    var tmp =$("#img_"+$scope.id).css('padding');
    tmp.replace('px', '');
    Vorrei avere il valore del padding in forma numerica e quindi pensavo di togliere px dalla stringa e poi fare un parseInt. Ma non funziona.
    Dove sbaglio?
    Grazie
    Rino
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,690
    Ciao, in particolare ci sono due "errori":

    Errore 1
    codice:
    var tmp =$("#img_"+$scope.id).css('padding');
    La proprietà padding è una proprietà abbreviata (come molte altre proprietà CSS) a cui appartengono delle relative specifiche (sotto)proprietà; che in questo caso sono padding-top, padding-right, padding-bottom, padding-left.

    Come indicato nella documentazione relativa al metodo css() di jQuery, recuperare il valore di proprietà abbreviate potrebbe generare dei risultati non garantiti:

    Retrieval of shorthand CSS properties (e.g., margin, background, border), although functional with some browsers, is not guaranteed. For example, if you want to retrieve the rendered border-width, use: $( elem ).css( "borderTopWidth" ), $( elem ).css( "borderBottomWidth" ), and so on.
    fonte: http://api.jquery.com/css/

    Questo significa che la tua variabile tmp potrebbe ottenere un valore inesatto o comunque un risultato inconsistente anche a seconda del browser. Su FF mi pare che restituisca una stringa vuota.

    Come è consigliato nella documentazione, dovresti piuttosto usare una proprietà specifica; nel tuo caso potrebbe essere una cosa del genere:
    var tmp = $("#img_"+$scope.id).css('paddingTop');

    Errore 2
    codice:
    tmp.replace('px', '');
    Il metodo replace() non modifica la variabile originale, come indicato nella documentazione:

    This method does not change the original string.
    fonte: https://www.w3schools.com/Jsref/jsref_replace.asp

    Questo significa che la tua variabile tmp sostanzialmente non subirà alcun replace.
    Come da esempio della documentazione, dovresti piuttosto riassegnare il valore modificato alla variabile stessa; nel tuo caso potrebbe essere una cosa del genere:
    codice:
    tmp = tmp.replace('px', '');
    Il tuo codice potrebbe essere anche impostato in un'unica riga:
    codice:
    var tmp = $("#img_"+$scope.id).css('paddingTop').replace('px', '');
    Consiglio
    Vorrei avere il valore del padding in forma numerica e quindi pensavo di togliere px dalla stringa e poi fare un parseInt
    Teoricamente potresti fare direttamente il parseInt senza il replace, funziona ugualmente e sarebbe anche più veloce:
    codice:
    var tmp = parseInt($("#img_"+$scope.id).css('paddingTop'));
    Ad ogni modo c'è da tener conto che in entrambi i casi (sia col replace sia senza) otterresti la sola parte intera del valore. Ad esempio, se il valore fosse "56.789px" non verrebbe arrotondato a 57 (che in genere sarebbe più ottimale) ma avresti giusto 56. Se ti serve ottenere un valore più prossimo all'originale, dovresti magari usare delle funzioni di arrotondamento. Vedi tu.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Grazie mille sei stato gentilissimo
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

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.