#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