Wie funktioniert JavaScript speichern von DOM-Elementen in Variablen?
Was ich meine ist, wie JavaScript speichern von DOM-Elementen, wenn Sie etwas tun, wie:
var foo = document.getElementsByTagName('p');
was bedeutet foo geworden??? ein array von Objekten? und wie kann ich hinzufügen weitere Elemente, die variable, zum Beispiel:
var bar = document.form[0].getElementsByTagName('input'); //5 elements
var foo = document.form[1].getElementsByTagName('input'); //4 elements
bar =+ foo;
for (i=0;i<bar.length;i++){
console.log(bar.value); //9 logged values
}
Ist es möglich, mehrere Elemente des gleichen Typs auf eine variable, die bereits Elemente in ihm? Muss ich eine Schleife durch alle Elemente in der I-variable hinzufügen möchten, und "schieben" Sie Sie in die variable möchte ich alle Daten?
- verwenden getElementsByTagName() anstelle von getElementsByName()
- Was wäre der Unterschied zwischen der Verwendung TagName und Name?
- Die getElementsByTagName () - Methode greift auf alle Elemente mit dem angegebenen tagname, und getElementsByName () - Methode greift auf alle Elemente mit dem angegebenen Namen. tagname ist ein html-element-tag-name wie <div> oder <p> - und name-Attribut, wie z.B. <div name="name">
Du musst angemeldet sein, um einen Kommentar abzugeben.
getElementsByTagName
(und ähnliche Methoden wie diegetElementsByName
,getElementsByClassName
etc) gibt einenNodeList
(oderHTMLCollection
, je nach browser scheinbar, siehe auch Unterschied zwischen HTMLCollection, Nodelisten, und arrays von Objekten).Obwohl es eine array-wie Objekt, d.h. es hat numerische Eigenschaften und eine
.length
Eigenschaft, können Sie keine neuen Elemente ein.Modifizieren
NodeList
, müssen Sie konvertieren Sie es zu einer regelmäßigen Anordnung. Dies kann leicht erreicht werden mit der array-Methode.slice
und zur gleichen Zeit, die Sie können mischen der beiden Listen mit.concat
:Dies funktioniert, weil die meisten native array-Methoden sind so definiert, dass das argument nicht eigentlich ein array, sondern ein array-ähnliches Objekt.
Die signifikanten Unterschiede zwischen einem
NodeList
und die Letzte Reihe werden:Array.prototype.slice.call(bar)
funktioniert nicht, es wird die Ausgabe der Fehlermeldung: "JScript-Objekt Erwartet" für eine Problemumgehung, die in einer Schleife durch alle Elemente in jeder Knotenliste und füge Sie in ein array ein komplettes Beispiel finden Sie in [[Funktion].anwenden (haben.) verursacht "JScript object expected" error in IE](stackoverflow.com/q/11112950/1079232)0
als zweites argument:Array.prototype.slice.call(bar, 0)
..slice
dauert in der Regel ein argument, um zu definieren die position, wo das schneiden beginnen soll. Wenn dieser Wertundefined
(z.B. wenn Sie don ' T-pass-argument) es wird in der Regel umgewandelt0
. Aber vielleicht ist der IE hat eine andere überprüfen, ob ein argument übergeben wurde oder nicht.Array.prototype.slice.call(bar, 0)
aber der gleiche Fehler geworfen wurde, denn nun werde ich mit dem Stäbchen da, die wir benötigen, um dieses kleine Skript auf IE 8, wenn du noch weitere Vorschläge, ich werde gerne versuchen, Ihnen vielen Dank!dies funktioniert nur bei string-Verkettung und es wäre
bar+= foo
aber beide bar und foo hier werden DOM-Objekte. also, wenn Sie wollen das hinzufügen von Elementen des gleichen Typs u können, erstellen Sie ein array.
z.B.,
NodeLists
, nicht die Elemente. Es würde nicht verbinden, beideNodeList
sfoo wird die Funktion. So, dass du nicht in der Lage, die foo zu bar, weil das macht keinen Sinn. Es wäre wie der Versuch, das zu tun:
Könnten Sie mehrere Elemente in einem einzigen array. Ich würde finden, dass der einfachste Weg, um erreichen Ihre Lösung.