2017-12-08 29 views
1

以下のコードがあります。私は、親指オブジェクトからmainThumbsを削除する方法を見つけることができないようです。私はスプライス(0、(mainThumbs.length - 1))、シフト、削除の親指[0]で試してみましたが、何も動作していないようです。この関数は、次のエラーを返します。 'Uncaught TypeError:thumbs.shift()は関数ではありません'、delete thumbs [0]は親指の全体と手を戻します。オブジェクト(JavaScript)を削除できないのはなぜですか?

var thumbs  = document.querySelectorAll('.thumbnail'); 
var mainThumbs = document.querySelectorAll('.main-thumbnail'); 

for(var i = 0; i < mainThumbs.length; i++){ 
    delete thumbs[0]; 

    console.log(thumbs); 
} 

これはmainThumbsがどのように見えるかです:

(12) [div.thumbnail.main-thumbnail, div.thumbnail.main-thumbnail, div.thumbnail.main-thumbnail, div.thumbnail.modal-open, div.thumbnail, div.thumbnail, div.thumbnail, div.thumbnail, div.thumbnail, div.thumbnail, div.thumbnail, div.thumbnail] 

とtypeof演算の親指とmainThumbsが

オブジェクトです:これは何の親指用のコンソール出力である

(3) [div.thumbnail.main-thumbnail, div.thumbnail.main-thumbnail, div.thumbnail.main-thumbnail] 

誰も私がmainThumbsを取り除くことができないように思える理由を説明することができますfr om親指オブジェクト? さらに正確であるとわかったので、削除またはシフトではなく、スプライスによる解決が欲しいと思います。

+0

あなたは、配列やDOMからそれらを削除しようとしていますか? –

+0

@JohnRodney - どの配列ですか?配列はありません。 – Quentin

+0

上記のコンソール出力は両方とも配列表記です。 'querySelectorAll'関数によって返されるArraylikeオブジェクトです。それらは '[] .slice.apply(res)'を使って配列に変換できます。次に、 'element.parentNode.removeChild(element);を使用してください。 –

答えて

2

document.querySelectorAllは配列を返しません。いくつかの点では、オブジェクトは配列のようなものですが、すべてではありません。

しかし、この問題に対するあなたのアプローチは複雑すぎます。

var non_main_thumbs = document.querySelectorAll('.thumbnail:not(.main-thumbnail)'); 
+0

検索で否定する可能性は認識していませんでした。多くの人に感謝します! – Shobolan

2

querySelectorAll('.thumbnail')

  1. 戻り値のコレクションではない配列:代わりに.thumbnailているすべての要素を取得してからちょうどthe negation pseudo-classを使用して1件の検索を行い、.main-thumbnailあるものを削除しようとしているの。
  2. しかし、あなたは、Arrayオブジェクトからスライス法を借りて、あなた自身の本当の配列を作成することができます
var thumbs  = document.querySelectorAll('.thumbnail'); 
var mainThumbs = document.querySelectorAll('.main-thumbnail'); 

var thumbsArr = Array.prototype.slice.call(thumbs); 
var mainThumbsArr = Array.prototype.slice.call(mainThumbs); 

for(var i = 0; i < mainThumbsArr.length; i++){ 
    delete thumbsArr[0]; 
    console.log(thumbsArr); 
} 
関連する問題