Javascript 访问数组中的所有元素

Javascript 访问数组中的所有元素,javascript,arrays,methods,Javascript,Arrays,Methods,我正在学习javascript,为了练习遍历DOM,我创建了一个方法,该方法基于“节点名”返回父元素数组。我这样做是为了选择某个元素的所有元素(即另一个元素的父元素)并对其进行样式设置或更改,等等 Element.prototype.specificParent = function(nodeName1) { nodeName1 = nodeName1.toUpperCase(); var x = this; var matches = []; var allPa

我正在学习javascript,为了练习遍历DOM,我创建了一个方法,该方法基于“节点名”返回父元素数组。我这样做是为了选择某个元素的所有元素(即另一个元素的父元素)并对其进行样式设置或更改,等等

Element.prototype.specificParent = function(nodeName1) {
    nodeName1 = nodeName1.toUpperCase();
    var x = this;
    var matches = [];
    var allParents = [];

    while(x.parentNode !== null) {
        allParents.push(x.parentNode);
        x = x.parentNode;
    }

    for(i = 0; i < allParents.length; i++) {
        if(allParents[i].nodeName === nodeName1) {
            matches.push(allParents[i]);
        }
    }

    return matches;

}
是否有办法更改“specificParent”方法以允许这样做

这似乎是一个毫无意义的练习,但我正在学习


谢谢

也许最简单的方法就是使用。
如果您可以使用ES6,它看起来是这样的:

parents.forEach(parent => parent.style.background = "black")
在ES5中,稍微不太清楚:

parents.forEach(function(parent) { parent.style.background = "black"; })

根据您的评论,您可以这样做:

Element.prototype.specificParent = function(nodeName1) {
    nodeName1 = nodeName1.toUpperCase();
    var x = this;
    var matches = [];
    var allParents = [];

    while(x.parentNode !== null) {
        allParents.push(x.parentNode);
        x = x.parentNode;
    }

    for(i = 0; i < allParents.length; i++) {
        if(allParents[i].nodeName === nodeName1) {
            matches.push(allParents[i]);
        }
    }

    function setStyle(styleKey, styleValue) {
        matches.forEach(function(parent) { parent.style[styleKey]= styleValue; });
    }

    return {
        elements : matches,
        setStyle : setStyle
    };
}

不,你必须使用一种方法。谢谢你的评论。我以为这就是答案,但就像我说的,我只是在学习,你说我必须使用一种方法是什么意思?i、 我以为我在用一种方法
parents.forEach(parent=>parent.style.background=“black”)
您使用过类似jQuery的库吗?看看他们的CSS方法,你可以返回一个对象,而不是元素数组,元素数组中包含方法来帮助你做你想做的事情,这些方法可以访问数组,就像在相同的范围内一样,但是如果需要的话,你还需要一个方法来返回数组。在更大范围内查看jQuery代码库,但原则大致相同。感谢您的回答。我认为我试图实现的目标比我最初想象的要复杂得多,远远超出了我目前的能力。我很欣赏这个答案,但我想更改函数,而不是在函数返回其数组后更改如何访问元素。如果有道理的话?!我知道你的意思。基本上,如果您有一个元素数组,那么您必须迭代所有要更改的元素。是否使用for循环(如示例中所示)或arrays API(如我的回答中所示)取决于个人偏好,但您需要这样或那样做。您可以使用JQuery或其他一些库,但在后台,它们将为您迭代该数组……没错,这就是我想要了解的。在函数中,我希望能够对元素进行迭代,以便返回的内容可以进行样式化,等等。因此,我可以重复使用简单的单行函数,这将为我完成艰巨的工作,而不必重新键入循环(无论我选择哪种方式)每次我都想把许多元素组合在一起。我明白这可能是不可能的,不仅仅是简单的(因此是复杂的{to me}jQuery)。谢谢你的输入。我更新了我的答案,向你展示了一个没有jQuery的例子。同样,您在不同的位置迭代元素。
parents.forEach(function(parent) { parent.style.background = "black"; })
Element.prototype.specificParent = function(nodeName1) {
    nodeName1 = nodeName1.toUpperCase();
    var x = this;
    var matches = [];
    var allParents = [];

    while(x.parentNode !== null) {
        allParents.push(x.parentNode);
        x = x.parentNode;
    }

    for(i = 0; i < allParents.length; i++) {
        if(allParents[i].nodeName === nodeName1) {
            matches.push(allParents[i]);
        }
    }

    function setStyle(styleKey, styleValue) {
        matches.forEach(function(parent) { parent.style[styleKey]= styleValue; });
    }

    return {
        elements : matches,
        setStyle : setStyle
    };
}
var parents = document.getElementById("startHere").specificParent("div");
parents.setStyle("background", "black");