Soy nuevo en JavaScript, no estoy seguro de si esta pregunta es muy básica. Creé un panel de actualización de precios de Bitcoin utilizando los datos obtenidos del WebSocket externo. Logré obtener los datos del WebSocket y mostrarlos en la tabla HTML. El precio se actualiza cada segundo, por lo que las filas de la tabla se están volviendo locas. Quiero limitar la fila de la tabla a 14 filas y después de que la tabla obtenga 14 filas, quiero eliminar esos datos e importar nuevos datos con Websocket sin aumentar las filas de la tabla HTML. Hice mi mejor esfuerzo para explicar.
He proporcionado los fragmentos de código a continuación, así como un Websocket externo desde donde extraigo los datos.
Avíseme cómo debo insertar la fila dinámicamente en una tabla HTML. Muchas gracias de antemano
<script> window.onload = () => { function insertRow(price){ var tr = document.createElement("tr"), tdCoin = document.createElement("td"), tdPrice = document.createElement("td"), docFrag = new DocumentFragment(); tdCoin.textContent = "BTC"; tdPrice.textContent = `${Number(price.slice(0,-6)).toLocaleString("en-US")}`; tr.appendChild(tdCoin); tr.appendChild(tdPrice); docFrag.appendChild(tr); return docFrag; } var binanceSocket = new WebSocket("wss://stream.binance.com:9443/ws/btcusdt@trade"), table = document.getElementById("pricetable"); binanceSocket.onmessage = function(event) { var messageObject = JSON.parse(event.data); table.appendChild(insertRow(messageObject.p)); } } </script> <table class="table table-striped"> <thead> <tr> <th>Coin</th> <th scope="col">Price</th> </tr> </thead> <tbody id="pricetable" class="crypt-table-hover"> </tbody> </table>Puede obtener todas las filas en su tabla usando querySelectorAll("tr") . Puede eliminar elementos de su tabla usando removeChild .
Entonces, para asegurarse de que su tabla nunca crezca más allá de x filas, haga lo siguiente:
const rows = table.querySelectorAll("tr"); if (rows.length > 14) table.removeChild(rows[0]);Aquí hay un ejemplo de trabajo:
window.onload = () => { function insertRow(price) { var tr = document.createElement("tr"), tdCoin = document.createElement("td"), tdPrice = document.createElement("td"), docFrag = new DocumentFragment(); tdCoin.textContent = "BTC"; tdPrice.textContent = `${Number(price.slice(0,-6)).toLocaleString("en-US")}`; tr.appendChild(tdCoin); tr.appendChild(tdPrice); docFrag.appendChild(tr); return docFrag; } var binanceSocket = new WebSocket("wss://stream.binance.com:9443/ws/btcusdt@trade"), table = document.getElementById("pricetable"); binanceSocket.onmessage = function(event) { var messageObject = JSON.parse(event.data); table.appendChild(insertRow(messageObject.p)); const MAX_ROWS = 5; const rows = table.querySelectorAll("tr"); if (rows.length > MAX_ROWS) table.removeChild(rows[0]); } } <table class="table table-striped"> <thead> <tr> <th>Coin</th> <th scope="col">Price</th> </tr> </thead> <tbody id="pricetable" class="crypt-table-hover"> </tbody> </table>