拼接不是函数错误

Splice is not a function error

我收到错误 tweetParentsArray.splice 不是函数 在 injectFactCheck

function injectFactCheck(){
    var index = 5;
    var tweetParentsArray = document.getElementsByClassName("js-stream-tweet");
    if(tweetParentsArray.length == 0){return;}
    tweetParentsArray.splice(0, index);

当我 console.log tweetParentsArray 时,它对我来说似乎是一个普通数组,所以我不确定为什么这个函数不存在于这个对象上。

getElementsByClassName return 一个 HTML 集合。它没有拼接方法。 可以将HTMLCollection转为数组,使用拼接的方式。

var tweetParentsArray = Array.prototype.slice.call(document.getElementsByClassName("js-stream-tweet"))
    if (tweetParentsArray.length == 0) {
      return;
    }
    tweetParentsArray.splice(0, index)

这实际上是一个 HTMLCollection,即 "array-like"。有关详细信息,请参阅 https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection

document.getElementsByClassName returns HTMLCollection 这不是数组。您可以使用Array.prototype.slice.call(htmlCollection)将其转换为数组,然后用数组进行进一步计算。

function injectFactCheck(){
  var index = 5;
  var htmlCollection = document.getElementsByClassName("js-stream-tweet");
  var tweetParentsArray = Array.prototype.slice.call(htmlCollection);
  if (tweetParentsArray.length == 0){return;}
  tweetParentsArray.splice(0, index);
}

看更多这个问题:Most efficient way to convert an HTMLCollection to an Array