11

html オブジェクトで構成される 2 つの配列をマージしようとしています。何らかの理由で .concat() を使用してもうまくいきません。

問題を示す簡単なペンを次に示します: http://codepen.io/anon/pen/kIeyB

注: 少しでも似たようなものを検索しようとしましたが、私の質問に答えるものは何も見つかりませんでした。

for ループを使用してこれを行うことができると思いますが、車輪を再発明することはしません。

var x = document.getElementById("hello");
var items = x.getElementsByClassName("one");
//alert(items.length);
var items2 = x.getElementsByClassName("two");
//alert(items2.length);
items = items.concat(items2);
//alert(items.length);
4

4 に答える 4

4

これは、次のようにして行うこともできます。

var allitems = [];
allitems = Array.prototype.concat.apply(allitems, x.getElementsByClassName("one"));
allitems = Array.prototype.concat.apply(allitems, x.getElementsByClassName("two"));

変数は、クラス&を持つすべての要素を含むallitems単一の JavaScript になります。Arrayonetwo

于 2017-01-13T00:29:15.777 に答える
1

あなたが持っているのは HTMLCollections です。これは配列のように動作しますが、配列ではありません。ここを参照してください: https://developer.mozilla.org/en/docs/Web/API/HTMLCollection :

..コレクションは、DOM ノードのリストを表すオブジェクトです。

あなたの場合、これらのオブジェクトを連結して新しい配列にすることができます。

var itemsnew;
var x = document.getElementById("hello");
var items = x.getElementsByClassName("one");
var items2 = x.getElementsByClassName("two");
itemsnew = Array.prototype.concat.call(items, items2);

ここで、次の場合:

console.log(itemsnew);

戻ります:

[HTMLCollection[1], HTMLCollection[1]]

と:

console.log(itemsnew[0][0]);

戻ります:

<div class="one"></div>
于 2014-06-10T05:26:41.187 に答える