#javascript #html
Вопрос:
Мой код в основном извлекает данные API, создает элементы HTML для каждого и обновляет элементы innerHTML данными API.
Как я могу обновить данные из API и обновить их без создания других HTML-элементов?
Это мой настоящий код:
let divCrypto = document.getElementById("divCrypto");
let temp, p1, p2, p3, imgz;
let data = [];
const getData = async () => {
for (i = 0; i < 2; i ){
coinName = await fetch("https://api.coinlore.net/api/tickers/")
.then((res) => res.json());
data.push(coinName.data[i]);
p1 = document.createElement("p");
p2 = document.createElement("p");
p3 = document.createElement("p");
p1.innerHTML = "Coin:" " " data[i].name;
p2.innerHTML = "Coin:" " " data[i].price_usd;
p3.innerHTML = data[i].percent_change_7d "%";
divCrypto.appendChild(p1);
divCrypto.appendChild(p2);
divCrypto.appendChild(p3);
}
console.log(data);
};
getData();
console.log(data);
Я попытался использовать : setInterval (getData, 1000); но через каждую секунду он снова и снова воссоздает HTML-элементы.
Я также попытался создать 2 разные функции, но я не знаю, как получить доступ к данным за пределами функции getData ().
Если я консольно зарегистрирую это снаружи, то после вызова функции и обновления данных я получу [], и я не могу понять, почему.
Комментарии:
1. вы можете просто очистить элемент и добавить к нему, поэтому перед добавлением в divCrypto просто добавьте
divCrypto.innerHTML = '';
2. Не работает. Я попробовал, и он создает только один элемент, хотя функция повторяется 3 раза.
3. Ах, я вижу, вам нужно 3 результата, затем добавьте это перед циклом, а также, если вам нужны 3 результата, ваш цикл for должен быть
for (i = 0; i < 3; i )
4. Проверьте это здесь: codepen.io/wyzix33/pen/xxLbbdV?editors=1011
5. codepen.io/wyzix33/pen/xxLbbdV?editors=1011 Посмотрите, действительно ли это то, что вам нужно, вам просто нужно добавить в html-объект монеты, которые вы хотите отобразить, и функция сгенерирует для них html-код, если он не существует, или просто обновит значения, если они существуют
Ответ №1:
Вы можете добавить в html-объект монеты, которые хотите отобразить, и функция сгенерирует для них html-код, если он не существует, или просто обновит значения, если они существуют
let divCrypto = document.getElementById("divCrypto");
let html = { BTC: 1, ETH: 1, ADA: 1 };
let data = [];
let temp, p1, p2, p3, container;
const getData = async () => {
coinName = await fetch("https://api.coinlore.net/api/tickers/").then((res) =>
res.json()
);
for (i = 0; i < 3; i ) {
data.push(coinName.data[i]);
container = document.getElementById(data[i].symbol);
if (html[data[i].symbol] amp;amp; !container) {
// if this is the first time we read this coin we generate the html
container = document.createElement("div");
container.id = data[i].symbol;
p1 = document.createElement("p");
p2 = document.createElement("p");
p3 = document.createElement("p");
container.appendChild(p1);
container.appendChild(p2);
container.appendChild(p3);
divCrypto.appendChild(container);
}
if (html[data[i].symbol]) {
container.children[0].innerHTML = "Coin:" " " data[i].name;
container.children[1].innerHTML = "Coin:" " " data[i].price_usd;
container.children[2].innerHTML = data[i].percent_change_7d "%";
}
}
console.log(data);
};
getData();
setInterval(getData, 1000);
//console.log(data);
<div id="divCrypto"></div>