【问题标题】:Why am I unable to delete objects (JavaScript)?为什么我无法删除对象 (JavaScript)?
【发布时间】:2018-05-22 15:00:54
【问题描述】:

我有下面的代码,但我似乎找不到从 thumbs 对象中删除 mainThumbs 的方法。我已经尝试过 splice(0,(mainThumbs.length - 1))、shift、delete thumbs[0],但似乎没有任何效果。这些函数呈现以下错误“未捕获的 TypeError:thumbs.shift() 不是函数”,而删除 thumbs[0] 只返回整个拇指并且未触及。

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 的样子:

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

这是控制台为拇指输出的内容:

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

thumbs 和 mainThumbs 的 typeOf 是 object

谁能解释为什么我似乎无法从 thumbs 对象中删除 mainThumbs ? 我还想要一个带有拼接而不是删除或移位的解决方案,因为我发现它更准确。

【问题讨论】:

  • 您是要从数组还是 dom 中删除它们?
  • @JohnRodney — 什么数组?没有数组。
  • 以上控制台输出都是数组表示法。 querySelectorAll 函数返回的类数组对象。可以使用[].slice.apply(res) 将它们转换为数组。然后使用element.parentNode.removeChild(element);

标签: javascript arrays dom javascript-objects


【解决方案1】:

document.querySelectorAll 不返回数组。在某些方面,该对象类似于数组,但不是全部。

不过,您解决此问题的方法过于复杂。不要获取所有 .thumbnail 的元素,然后尝试删除 .main-thumbnail 的元素,只需使用 the negation pseudo-class 进行一次搜索:

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

【讨论】:

  • 我不知道在搜索中否定的可能性。非常感谢!
【解决方案2】:

querySelectorAll('.thumbnail')

  1. 返回集合而不是数组。
  2. 但是您可以从 Array 对象中借用 slice 方法并创建自己的真实数组:
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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多