2016-05-01 10 views
-1

Ich habe diese Funktion:Convert Funktion in jQuery-Plugin

function abbrNum(number){ 
    var decPlaces = Math.pow(10, 3); 
    var abbrev = ["k", "m", "b", "t", "qd", "qi", "sx", "sp", "oc", "n", "d"]; 
    for (var i = abbrev.length-1; i>=0; i--){ 
     var size = Math.pow(10, (i+1) * 3); 
     if(size <= number){ 
      number = Math.round(number*decPlaces/size)/decPlaces; 
      if((number == 1000) && (i < abbrev.length - 1)){ 
       number = 1; 
       i++ 
      } 
      number += abbrev[i]; 
      break; 
     }   
    } 
    return number; 
} 

ich es in ein Plugin zum Beispiel genannt konvertieren möchten format, die einen Text von einer Spanne wird, läuft es durch diese Funktion, stellen Sie den Text von der gleichen Spanne das Ergebnis, das es von der Funktion erhält.

So, jetzt, wenn Sie die Funktion ausführen funktioniert es wie folgt aus:

abbrNum(123456); //123.456k 
abbrNum(12345678); //12.345m 

Deshalb möchte ich eine Spanne auswählen zu können, ändern Sie es Text ist, und es dann zu formatieren, so etwas wie:

$('span').text(1234).format(); //set span text to 1.234k 

Wie kann ich das tun?

+1

Sie haben vielleicht mit der Dokumentation beginnen soll: https://learn.jquery.com/plugins/ – Quentin

Antwort

1

erstellen Plugin von der Funktion, die Sie, mit jQuery text() Methode

$.fn.format = function(){ 
 
    this.text(function(_, number) { 
 
     var decPlaces = Math.pow(10, 3); 
 
     var abbrev = ["k", "m", "b", "t", "qd", "qi", "sx", "sp", "oc", "n", "d"]; 
 
     for (var i = abbrev.length-1; i>=0; i--){ 
 
      var size = Math.pow(10, (i+1) * 3); 
 
      if(size <= number){ 
 
       number = Math.round(number*decPlaces/size)/decPlaces; 
 
       if((number == 1000) && (i < abbrev.length - 1)){ 
 
        number = 1; 
 
        i++ 
 
       } 
 
       number += abbrev[i]; 
 
       break; 
 
      }   
 
     } 
 
     return number; 
 
    }); 
 
} 
 

 
$('span').text(1234).format();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<span></span>

+0

Danke, das ist die richtige Antwort! –

+1

Gern geschehen! – adeneo

0

Dies wäre der einfachste Weg.

$.fn.pluginName = function() { 
    // Your Code 
}; 
+1

Das wird nicht funktionieren. Der vorhandene Code erwartet, dass der Text so formatiert wird, dass er vom Funktionsargument stammt, und gibt das Ergebnis zurück, anstatt es in das DOM zu schreiben. – Quentin

+0

Wie liest du das? * ... welches Text aus einem Bereich bekommt, führt ihn durch diese Funktion, setzt den Text desselben Bereichs auf das Ergebnis, das er von der Funktion erhält. * @Quentin? – PeterKA

+0

@PeterKA - Und wenn Sie den OP-Code, wo JohaanThor sagte, um es zu sagen, dann wird es das nicht tun. Es wird es nicht von einer Spannweite bekommen. Es wird nicht durch die Funktion laufen. Es wird nicht den Text der Spanne festlegen. – Quentin