Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jQuery replace English Number array with Arabic Number array

I have many spans on my page with this class

<span class="price">AED &nbsp;2129</span>
<span class="price">AED &nbsp;4129</span>

I want to use jQuery to find all the spans and then replace the AED with the Arabic word of Dirham and also replace the numbers with Arabic numbers.

This is my current code I have been trying for some hours.

jQuery('span.price').val(function(i,val) {

    // text
    var en_currency = "AED";
    var ar_currency = "درهم";

    // array
    var f = ['0','1','2','3','4','5','6','7','8','9', en_currency];
    var r = ['٠','١','٢','٣','٤','٥','٦','٧','٨','٩', ar_currency];

    var valArray = val.split(' ');
    jQuery.each(valArray, function(i,v){
       var inF = jQuery.inArray(v, f);
       if(inF !== -1){
         valArray[i] = v.replace(f[inF], r[inF]);
       }
    });
    return valArray.join(' ');
});
like image 970
TheBlackBenzKid Avatar asked Jan 17 '26 03:01

TheBlackBenzKid


2 Answers

You need to use text() not val(), val() using for getting or setting form fields in case of span text() is needed. Then you can simplify your code with callback in replace()

// text
var en_currency = "AED";
var ar_currency = "درهم";

// array
var f = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
var r = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];


jQuery('span.price').text(function(i, val) {
  return val.replace(en_currency, ar_currency).replace(/\d/g, function(m) {
    return r[f.indexOf(m)];
  })
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<span class="price"> AED 2312 </span>
<span class="price"> AED 1023 </span>
like image 61
Pranav C Balan Avatar answered Jan 19 '26 17:01

Pranav C Balan


Use text or html. span elements don't have value attribute.

jQuery('span.price').val(function(i,val) {
//                   ^^^

Should be

jQuery('span.price').text(function(i,val) {

Demo:

// text
var en_currency = "AED";
var ar_currency = "درهم";

// array
var f = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
var r = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];


jQuery('span.price').text(function(i, val) {
  val = val.replace(en_currency, ar_currency);
  
  var valArray = val.split('');
  
  jQuery.each(valArray, function(i, v) {
    console.log(i,v);
    var inF = jQuery.inArray(v, f);
    if (inF !== -1) {
      valArray[i] = v.replace(f[inF], r[inF]);
    }
  });
  return valArray.join('');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<span class="price">AED &nbsp;2129</span>
<span class="price">AED &nbsp;4129</span>
like image 33
Tushar Avatar answered Jan 19 '26 17:01

Tushar



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!