将带有对象的JS数组转换为HTML集合

时间:2017-02-25 23:11:52

标签: javascript

我对我的项目有点了解,我决定简化一些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;
};

有什么建议吗?

感谢。

1 个答案:

答案 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属性都应该是唯一的。