所以我有一个很少属性的简单类。使用原型我添加了一些方法。这些方法返回this
,所以我可以将tham链接在一起。
Get
方法找到所有元素并放入allCurrentElements
,这是一个数组(或者至少我认为是这样)。当我使用CreateElement
方法时,它只是创建元素并尝试将其推送到现有数组allCurrentElements
。
要使用它,只需编写var a = _h.Get('p').CreateElement('div')
即可。这是我收到错误Uncaught TypeError: this.allCurrentElements.push is not a function(…)
的地方。
如果我尝试使用索引分配新创建的元素,它不会抛出错误,但是此元素不会出现在数组中。
var _h = (function(){
var Helper = function(){
this.allCurrentElements = [];
}
Helper.prototype.Get = function(query){
this.allCurrentElements = document.querySelectorAll(query);
return this;
}
Helper.prototype.CreateElement = function(el, attr) {
var elem = document.createElement(el);
for (var a in attr) {
elem[a] = attr[a];
}
//this.allCurrentElements[this.allCurrentElements.length] = elem;
this.allCurrentElements.push(elem);
return this;
}
return new Helper();
})();
答案 0 :(得分:4)
document.querySelectorAll()
返回NodeList
,这是一个类似于数组的对象。
问题是NodeLists是只读的。你需要在数组中转换它。 Array.prototype.slice.call(document.querySelectorAll(query));
答案 1 :(得分:3)
您必须查看Document.querySelectorAll()
文档https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll
返回所有匹配元素节点的非实时NodeList。
NodeList与数组非常相似,并且很容易在它们上调用Array.prototype方法,但NodeList对象没有任何熟悉的Array方法。
所以你必须迭代NodeList,如:
Array.prototype.forEach.call(document.querySelectorAll(query), function(element){
allCurrentElements.push(element);
});