2009-11-19 3 views
0

J'ai besoin de créer du Javascript sur mon rapport Web qui convertit les valeurs de table en milliers ou en millions (par exemple divise ou multiplie par 1000). Le problème est que chaque valeur est "cliquable" (c'est-à-dire qu'elle est enveloppée dans une étiquette d'ancrage).Mise à jour Javascript vers la cellule de tableau HTML (de milliers à millions)

Est-ce possible?

<table class="Table" > 
<thead><tr> 
    <th class="l Header" scope="col">£000s</th> 
    <th class="l Header" scope="col">Col1</th> 
    <th class="l Header" scope="col">Col2</th> 
</tr></thead> 
<tbody> 
<tr> 
    <td class="l Data"> My Data Row </td> 
    <td class="l Data"> <a class=nums href="javascript:MyFunc();"> 11,372,397</a></td> 
    <td class="l Data"> <a class=nums href="javascript:MyFunc();"> 11,344,327</a></td> 
</tr> 
</tbody> 

modifier

J'utilise IE6. Fondamentalement, le but est d'avoir un bouton 'milliers' et un bouton 'millions' pour que les valeurs de la table deviennent 11,372k ou 11,4m etc ...

+0

Im ne pas comprendre votre question, pourriez-vous plus en détail – TStamper

+3

Je suis tenté de downvote juste b/c vous avez mentionné IE6 :-( –

+0

«J'utilise IE6. » Traître vous – erenon

Répondre

3

J'utiliseraient jQuery

$(function(){ 
    $.each($('.nums'), function() { 
     $(this).html(Number($(this).html().replace(/,/g,"")) /*your math here*/); 
    }); 
}); 

En réponse à votre édition: Depuis que je suis ennuyé que j'ai écrit ce morceau de code de travail pour vous, rond et insérez ',' comme bon vous semble.

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 

<table class="Table" > 
<thead><tr> 
    <th class="l Header" scope="col">£000s</th> 
    <th class="l Header" scope="col">Col1</th> 
    <th class="l Header" scope="col">Col2</th> 
</tr></thead> 
<tbody> 
<tr> 
    <td class="l Data"> My Data Row </td> 
    <td class="l Data"> <a class="nums" href="javascript:MyFunc();"> 11,372,397</a></td> 
    <td class="l Data"> <a class="nums" href="javascript:MyFunc();"> 11,344,327</a></td> 
</tr> 
</tbody> 

<input type="button" onclick="toMillions();"> 
<input type="button" onclick="restore();"> 

<script type="text/javascript"> 

    $(function(){ 
     $.each($('.nums'), function() { 
      $.data(this, "theValue", $(this).html()); 
     }); 
    }); 


    function toMillions(){ 
     $.each($('.nums'), function() { 
      $(this).html(Number($.data(this,"theValue").replace(/,/g,""))/1000000 + ' million'); 
     }); 
    } 

    function restore(){ 
     $.each($('.nums'), function() { 
       $(this).html($.data(this,"theValue")); 
     }); 
    } 
</script> 
+0

Un grand merci Odge - Je vais regarder ça lundi. Question rapide cependant - ce code fonctionnera-t-il sans connexion Internet? J'ai besoin du code pour fonctionner en mode hors ligne aussi. –

+0

Vous devez fournir le JS JQuery d'une autre manière, mais cela devrait fonctionner. –

1

Je commencerais à penser à document.getElementsByClassName ('nums'), qui vous donnera un tableau de vos éléments. Quelque chose comme ceci:

nums = document.getElementsByClassName('nums'); 
for (i in nums) 
    nums[i].innerHTML = nums[i]+',000';i 

Cela fonctionne probablement que dans les navigateurs plus récents, cependant, de sorte que vous pouvez utiliser une méthode similaire dans un framework javascript. Jquery permet d'obtenir les éléments de classname avec le sélecteur

$('.nums') 
+0

Jetez un oeil à une implémentation cross-bwoser ici - http://robertnyman.com/2008/05/27/the-ultimate-getelementsbyclassname-anno-2008/ –

+0

devrait avoir ledit navigateur ci-dessus, je semble souffrir modérément d'un lisp tapant :) –

+0

.getElementByClassName ne fonctionne malheureusement pas dans IE8 (sans solutions de contournement) qui je dirais est un navigateur assez nouveau. –

Questions connexes