2017-12-08 23 views
1

아래 코드가 있는데 엄지 개체에서 mainThumbs를 제거하는 방법을 찾지 못하는 것 같습니다. 나는 스플 라이스 (0, (mainThumbs.length - 1)), 이동, 삭제 엄지 [0]로 시도했지만 아무것도 작동하지 않는 것 같습니다. 이 함수는 'Uncaught TypeError : thumbs.shift()가 함수가 아닙니다.'오류를 렌더링하는 반면 delete thumbs [0]은 엄지 손가락을 그대로 돌려줍니다.개체 (자바 스크립트)를 삭제할 수없는 이유는 무엇입니까?

(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] 

이 엄지 손가락의 콘솔 출력은 무엇인가 :

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이 같은 모습입니다 누구든지 왜 mainThumbs fr을 제거 할 수 없는지 설명 할 수 있습니까? om 엄지 손가락 개체? 더 정확한 것으로 판단되면 삭제 나 교대가 아닌 스플 라이스가있는 솔루션을 원합니다.

+0

당신은 배열 또는 DOM에서 제거하려고? –

+0

@ John Rhodney - 배열은 무엇입니까? 배열이 없습니다. – Quentin

+0

위의 콘솔 출력은 둘 다 배열 표기법입니다. Arraylike 객체는'querySelectorAll' 함수에 의해 반환됩니다. 그들은'[] .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를 사용하여 하나 개의 검색을, .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); 
}