我对我的项目有点了解,我决定简化一些js函数,我在DOM树中寻找父元素,然后在一个函数中多次向下钻取元素。相反,我虽然我会创建一个函数的实例,这将保留一些数据,然后我可以轻松地引用和操作对象。我得到了它的工作,但随着我的进展,我决定扩展功能并添加一些额外的功能,如getElementsByClassNameThenTagName
。
我循环遍历数组,如果添加匹配元素到数组。
我注意到(遗憾的是只是现在)我正在创建一个包含元素而不是HTML集合的数组。结果,我不能通过键入buttons['reset'].disabled = false;
来引用我的发现中的对象。我可以通过buttons[3].disabled = false;
访问我的重置按钮,但这会给您带来很多不便。
因此,我正在寻找一种方法将我的数组与对象转换为HTML集合。
请参阅下面我目前的职能:
this.getElementsByClassNameThenTagName = function (elementClass, elementTag) {
if (parentNode == null) {
this.init();
}
var results = [];
var regexStr = elementClass;
var regex = new RegExp(regexStr);
var x = moduleNode.getElementsByClassName(elementClass);
// console.log(x);
var y;
for ( var i = 0; i < x.length; i++ ) {
// console.log(i);
y = x[i].getElementsByTagName(elementTag);
// console.log(y);
for (var k=0; k<y.length; k++){
// console.log(y[k]);
results.push(y[k]);
}
// console.log(results);
}
return results;
};
有什么建议吗?
感谢。
答案 0 :(得分:1)
this.getElementsByClassNameThenTagName = function (elementClass, elementTag) {
if (parentNode == null) {
this.init();
}
var results = {}; // thid should be an object (collection)
var x = moduleNode.querySelectorAll("." + elementClass + " " + elementTag);
x.forEach(function(y) {
var name = y.getAttribute("name"); // if you really sure that all the matched elements have names
results[name] = y;
});
return results;
};
现在您可以像这样使用results
数组:
var someElement = results['some name'];
注意:所有匹配的元素x
都应具有name
属性,匹配元素的所有name
属性都应该是唯一的。