Заменить точку на запятую в содержимом данных Json

#javascript #php #jquery #json

#javascript #php #jquery #json

Вопрос:

Я извлекаю процентные данные с помощью файла json и отображаю их на своем веб-сайте :

 <?php
    $resultData = file_get_contents('https://example.com/json/stats?_l=en');
    $jsonData = json_decode($resultData, true);
    if( isset( $jsonData["stats"] ) amp;amp; !empty($jsonData["stats"]) ){
    
        foreach( $jsonData["stats"] as $stat ){                 
            echo "<div class='stat-item'>".$stat["item_example"]." % My Data displaying here </div>";
        }           
    }
?>
 

Я пытаюсь заменить «точку» на «запятую» в отображаемом проценте. Пример заменить 5.5 на 5,5

Я пытаюсь сделать это с помощью следующего Javascript

 <script>
    $(document).ready(function () {
        $('.stat-item').keyup(function () {
            var content = $(this).val();
            $(this).val(content.replace(/[.] /g, ','));
        });
    });
</script>
 

Комментарии:

1. Почему на keyup событии?

2. попробуйте это $(this).val(content.replace(/./g, ‘,’)

3. Вы можете использовать Intl.NumberFormat , чтобы включить форматирование чисел с учетом языка.

4. Не похоже, что вы пытаетесь изменить «содержимое данных json» — больше, чем вы хотите изменить html (который ранее был создан из данных json, но это не имеет значения на момент изменения).

5. В чем здесь вопрос / проблема? Вы добавили некоторый html в a div , но затем использовали keyup / val — div, которые не фокусируются, если вы не сделаете их доступными для редактирования — вы это сделали? (не в вашем фрагменте) Измените keyup click , чтобы увидеть его в действии, или просто удалите строку ввода и $(".state-item").each(... при загрузке. Тогда в вашем вопросе задается вопрос об изменении содержимого json, но есть код для изменения html.

Ответ №1:

Нет необходимости создавать dom с помощью php, а затем манипулировать им с помощью javascript (кстати, с неправильным обработчиком событий). Я бы сделал это на стороне php, используя number_format

Таким образом, ваш php станет:

 echo "<div class='stat-item'>".number_format($stat["item_example"],2,",",".")." % My Data displaying here </div>";
 

В этом примере вы ограничиваете возвращаемые числа до 2 знаков после запятой, вы используете , в качестве десятичного разделителя вместо точки, которую вы получаете сейчас, и используете . в качестве разделителя тысяч (только для информации, поскольку я не ожидаю, что ваши цифры будут выше 100)

Ответ №2:

Вы не должны использовать val() but text() вместо этого; также неясно, зачем вам нужно keyup событие на div . Я бы просто написал:

 $(".stat-item").each(function () {
  var content = $(this).text();
  $(this).text(content.replace(/[.] /g, ","));
});
 

Комментарии:

1. Спасибо за ваш ответ. Я пробовал это, но это все еще не работает.

2. Что именно не работает? Вы можете проверить здесь codepen.io/dariospadoni/pen/JjRQOmp что точка заменяется на , когда вы выполняете код

3. это была моя ошибка. Я забыл объявить <script src=» code.jquery.com/jquery-1.11.0.min.js «></script > Спасибо @Dario