Ich habe eine Funktion, die einem Array in zufälligen Abständen neue Zeichenfolgen hinzufügt. Wie kann ich jedes Mal, wenn die Länge des Arrays zunimmt, mit jedem neuen String auf meiner Seite mit Javascript und/oder jquery anzeigen?Wie kann ich bei jeder Erhöhung der Array-Länge dynamisch neue Inhalte zu meiner Seite hinzufügen?
Wie kann ich bei jeder Erhöhung der Array-Länge dynamisch neue Inhalte zu meiner Seite hinzufügen?
Antwort
Sie können eine rekursive Timer-Funktion einstellen, dass Ihr Array Display Behälter jedes Mal aktualisiert wird sie genannt wird (angepasst von Javascript dynamic array of strings):
<html>
<body>
<script type="text/javascript">
var arr = [];
function add() {
arr.push("String " + Math.random());
}
function show() {
var html = '';
for (var i = 0; i < arr.length; i++) {
html += '<div>' + arr[i] + '</div>';
}
var con = document.getElementById('container');
con.innerHTML = html;
}
function start() {
setTimeout(function() {
add();
// Note: you can call show in an independent timeout
show();
start();
}, 1000);
}
</script>
<input type="button" onclick="start();" value="start" />
<br />
<div id="container"></div>
</body>
</html>
Oder man kann es klüger machen und den Behälter nur aktualisieren, wenn die Arrays Länge geändert. Eine andere Möglichkeit besteht darin, einen Display-Container-Update-Callback an Ihre Array-Update-Funktion zu übergeben, so dass Sie jedes Mal, wenn Sie Ihr Array aktualisieren, Ihr Array neu anzeigen lassen.
<html>
<body>
<script type="text/javascript">
var arr = [];
var lastDisplayed = 0;
function add() {
arr.push("String #" + lastDisplayed + ": " + Math.random());
show(); // Update display container
};
function show() {
var node;
var textnode;
var container = document.getElementById('container'); // Get parent container
for (; lastDisplayed < arr.length; lastDisplayed++) {
node = document.createElement("li"); // Create a <li> node
textnode = document.createTextNode(arr[lastDisplayed]); // Create a text node
node.appendChild(textnode);
container.appendChild(node);
}
};
function start() {
setTimeout(function() {
add();
start();
}, 1000);
};
</script>
<input type="button" onclick="start();" value="start" />
<br />
<ul id="container"></ul>
</body>
</html>
Intern implementieren Angular- und andere Frameworks eine Kombination dieser Ansätze.
Wichtiger Hinweis: Abhängig von Ihrer Anwendung sollten Sie verschiedene Ansätze zum Aktualisieren Ihrer Seite ausprobieren, um die Reaktionsfähigkeit und Leistung der Benutzeroberfläche zu erhalten. Zum Beispiel möchten Sie möglicherweise Ihre GUI-Updates zeitlich auffüllen, wenn Array-Elemente zu oft hinzugefügt werden. Sie sollten auch weiterhin Elemente zu Ihrem DOM-Modell hinzufügen (siehe das zweite Beispiel), anstatt es neu zu schreiben (wie im ersten Beispiel), wenn die vorhandenen Elemente Ihres Arrays unverändert bleiben. Ähnliche Probleme müssen möglicherweise bei Verwendung eines dedizierten Frameworks wie Angular berücksichtigt werden.
Es gibt alle Arten von Problemen damit. Die Verwendung von innerHTML würde dazu führen, dass alle fertiggestellten Elemente jedes Mal neu auf den Bildschirm geschrieben werden. Zumindest würde es dazu führen, dass die Benutzeroberfläche spaziert und im schlimmsten Fall schwerwiegende Leistungsprobleme verursacht. Natives Javascript hat append und prepend Methoden zum Hinzufügen von DOM-Elementen im laufenden Betrieb, und da er auf jQuery verwiesen ist dies kein großer Vorschlag IMHO – QBM5
Letzte Beispiel mit JavaScript anhängen aktualisiert. Meine Antwort konzentrierte sich auf die Art und Weise, wie die GUI auf der Grundlage der Datenaktualisierungen aktualisiert werden kann. Es ist schwer zu sagen, um was es sich bei dem Autor der Frage handelt, ohne einen detaillierteren Kontext. Leistungsaspekte könnten ihren eigenen Thread verdienen. – Maksym
Sieht nicht so aus, als ob sich der OP sowieso interessiert. Liebe, wenn ich mir Zeit nehme zu helfen und sie lassen meine Antwort einfach hängen. – QBM5
Ich würde empfehlen, eine Bibliothek zu verwenden, die Eigentum Subskriptionen wie Knockout oder eckig behandeln, aber da das nicht in der Frage erwähnt wird, werde ich dieses Beispiel geben.
var someArray = [];
var standardPush = someArray.push;
someArray.push = function(){
// depending on your requirements you can switch these next two lines around
for (var i = 0; i < arguments.length; i++) {
updateUI(arguments[i]); // call code to update UI
standardPush(arguments[i]); // actually ad record to array
}
}
function updateUI(record){
// Some code that updates your UI
// example
$("#container").append($("<div>").text(record));
}
dann nennen Sie es wie ein normales Array.push
someArray.push(someRecord);
// or
someArray(record1, record2, record3....);
Dieser Code mehr Spaß als praktisch ist, würde ich wieder eine Bibliothek empfehlen, die Eigenschaft Abonnements behandelt.
- 1. Wie füge ich dynamisch neue Eingabefelder zu meiner Seite hinzu?
- 2. Erhöhung der Rechenzeit bei jeder Iteration derselben Berechnungen (R)
- 3. Neue Sitzung bei jeder Anfrage
- 4. Wie kann ich programmatisch Inhalte zu einer Bachstelzen-StreamField hinzufügen?
- 5. Neue Tabellenansichtszellen dynamisch hinzufügen
- 6. Dynamisch hinzufügen unverwechselbare Stil der ID zu meiner PageObject-Klasse
- 7. Wie dynamisch Parameter zu jeder URL mit jQuery Mobile hinzufügen?
- 8. Muss ich zu jeder Seite "<% @ Register assembly =" hinzufügen?
- 9. Wie kann ich flexbox auf meiner Wordpress-Seite hinzufügen?
- 10. Wie kann ich neue Google Adsense-Inhalte aktualisieren?
- 11. Wie kann ich neue Inhalte in ein HTML-Skript herunterladen?
- 12. Node.js: Neue Sitzung bei jeder Aktualisierung/Zugriff
- 13. Wie kann ich Google MDL-Elemente, die ich dynamisch zu meiner Seite hinzufüge, aktualisieren/aktualisieren?
- 14. einfache Möglichkeit, neue Inhalte aus dynamisch gefüllten Tabellen zu behandeln?
- 15. wie Titel, Stichwort und Beschreibung auf jeder Seite der einfachen PHP-Website anders dynamisch hinzufügen
- 16. WooCommerce Registrierungsformular zu jeder Seite/Vorlage hinzufügen
- 17. Wie kann ich zu einem JavaScript-Objekt hinzufügen Werte dynamisch
- 18. Kann ich mit MEF Inhalte zu einem vs2010-Kontextmenü hinzufügen?
- 19. Neue MySQL-Abfrage auf jeder Seite aktualisieren
- 20. Listbox Löschen vorhandenen Inhalte auf neue hinzufügen
- 21. Foto hinzufügen Bucket zu meiner phpfox Seite
- 22. Wie man neue aspx Seite dynamisch erzeugt?
- 23. iText neue Seite hinzufügen
- 24. jQuery: Hinzufügen eines Unterobjekts zu einem "Daten" -Objekt bei jeder AJAX-Anfrage auf der Seite
- 25. Wie kann ich Checkboxen dynamisch zu meinem Rails-Formular hinzufügen?
- 26. Wie bekomme ich CSS-Datei dynamisch in meiner HTML-Seite
- 27. Neue Ressourcen dynamisch hinzufügen - CoAP
- 28. Vim - Wie kann man Fehler bei der Plugin-Erhöhung erkennen?
- 29. Arraylänge in Mongodb erhalten?
- 30. Wie kann ich Tabellenzeilen dynamisch hinzufügen
Ein Blick in AngularJS (beste Lösung) oder jQuery verwenden, um HTML auf ein Element wie: '$ (" span.array_length ") .html (array_name.length);' und ' 0 zu setzen ' –
Sie können eine interaktive Bibliothek wie Angular, React, Vue, ... verwenden. Oder verwenden Sie ein natives JavaScript-Intervall und überprüfen Sie das Array jedes Mal – Mojtaba
Es würde helfen, etwas Code zu haben. Kann die Funktion, die die Zeichenfolgen hinzufügt, nur jquery '.append()' verwenden? – dhc