2011-01-13 3 views
7

Ho alcuni numeri in virgola mobile in cui vorrei indicare che le ultime cifre non sono così importanti. Quello che ho in mente è qualcosa di simile.C'è un modo semplice per definire gli ultimi due caratteri di una stringa?

Per il numero 273,978

<span style="font-weight:bold">273.9</span><span style="color:#3399ff">78</span> 

Sarebbe bello se ci fosse qualcosa di simile a un selettore CSS "nth-last-caratteri". Quindi ho potuto impostare tutto nel mio file CSS, invece di tagliare il numero in JavaScript. C'è un modo migliore per raggiungere questo obiettivo?

EDIT: Ecco quello che una soluzione nativa JavaScript assomiglia:

<span id="numstart" style="font-weight:bold">123.4</span><span id="numend" style="color:#3399ff">57</span> 

<script> 
var newnum = 273.978; 
var numStr = String(newnum) 
var numLen = numStr.length; 
var newStart = numStr.substring(0,numLen-2); 
var newEnd = numStr.substring(numLen-2,numLen); 
document.getElementById("numstart").innerHTML = newStart; 
document.getElementById("numend").innerHTML = newEnd; 
</script> 
+0

CSS unica soluzione o accetteresti javascript? – stef

+0

I CSS sarebbero grandiosi, ma non ne sono ottimista, quindi prenderò la migliore soluzione JavaScript. Sto usando YUI3, ma non penso che importi. – mjhm

+0

Non penso che esista una soluzione rigorosamente CSS. Quello che presenti qui è praticamente quello che farei e immaginerei cosa farebbe praticamente qualsiasi soluzione javascript. – scrappedcola

risposta

3

Fuori della parte superiore della mia testa in jQuery:

<script type="text/javascript"> 
$('.numbers').each(function() { 
    $(this).html(
     $(this).html().substr(0, $(this).html().length-2) 
      + "<span style='color: #3399ff'>" 
      + $(this).html().substr(-2) 
      + "</span>"); 
}); 
</script> 

Ecco un fiddle dimostrarlo. Mi dispiace che non sia un semplice JavaScript, ma sono sicuro che una delle persone qui presenti possa offrire una soluzione nativa se questo non riduce il tuo mais.

UPDATE: E questa è una soluzione non jQuery e un'altra fiddle dimostrativa. Ho anche infranto lo stile nei CSS.

<style type="text/css"> 
.unimportant { 
    color: #3399ff; 
} 
</style> 

<script type="text/javascript"> 
var numberTargets = document.getElementsByClassName('number'); 
for(i=0; i<numberTargets.length; i++) { 
    var html = numberTargets[i].innerHTML; 
    numberTargets[i].innerHTML = html.substr(0, html.length-2) 
     + "<span class='unimportant'>" 
     + numberTargets[i].innerHTML.substr(-2) 
     + "</span>"; 
} 
</script> 
+0

Perfetto ma non funziona in IE8 –

0

Si potrebbe utilizzare PHP per aggiungere una classe al tag span per i primi 3/4 caratteri (suppongo che si sta utilizzando PHP per generare questi numeri in virgola mobile) e una classe diversa da qualsiasi altra cosa,

Quindi aggiungi semplicemente le classi al tuo file CSS per evidenziare come desideri.

AFAIK non ci sono selettori CSS per fare ciò che si richiede, i selettori 'nth' sono più per tag, classi e id rispetto ai singoli caratteri.

MODIFICA: In javascript questo può essere fatto tramite foo.charAt (N);

Quindi caricare lo stringa in una var:

var foo=[number generation code]; 
var foo0=foo.charAt(0); 
var foo1=foo.charAt(1); 
var foo2=foo.charAt(2); 
var foo3=foo.charAt(3);

È possibile quindi stampare i caratteri nella posizione appropriata nel codice.

+0

I numeri sono tutti rigorosamente lato client. – mjhm

+0

Controlla il codice JS qui sopra per favore. –

1

Diverso da un approccio lato server (il più semplice), è possibile aggiungere un intervallo di sovrapposizione che ha width: 1.75em; background-color: rgba(255,255,255,0.5) e correggerlo a destra di un oggetto contenitore e un indice z maggiore dell'oggetto di visualizzazione mobile principale.

Se ti senti sperimentale potresti provare l'HTML5 <input type="number" step="0.1" />element, che a seconda del browser potrebbe arrotondare al valore più vicino in base al suo valore.

+0

Questo sembra più rischioso di un approccio JavaScript. Però se si lavora con un esempio potrei essere convinto. Io non mi sento davvero sperimentale;) – mjhm

+0

Sì, andrei sul lato server tbh – stef

6

avuto la stessa idea come Stef:

<style type="text/css"> 
    .number { 
     font-family: monospace; 
    } 
    .number:after { 
     background-color: rgba(255,255,255,0.5); 
     content: ""; 
     display: inline-block; 
     height: 1em; 
     width: 1.2em; 
     position: relative; 
     top: 0.25em; 
     right: 1.2em; 
    } 
</style> 

<span class="number">273.978</span> 
+0

+1 per avermi fatto colpire i libri CSS per capire questo. – mjhm