jQuery下一个()的原生JavaScript替代品

MyM*_*ial 2 javascript jquery

我有这个代码:

$.each(this.items, function(key, item) {
    item = $(item);
    item.css('background', 'red');
    item.next().css('display', 'none');
}
Run Code Online (Sandbox Code Playgroud)

现在,我需要用纯JavaScript重写它,所以我这样做

document.getElementById(aItems[iCount].id).style.background = 'red';
document.getElementById(aItems[iCount].id).style.display = 'none';
Run Code Online (Sandbox Code Playgroud)

问题是display:none必须为next()项目设置,而不是这个,我该怎么做?

谢谢.

Cer*_*rus 10

试试这个:

item.nextSibling.style.display = 'none'
Run Code Online (Sandbox Code Playgroud)

请记住,可能会选择元素旁边的文本内容,因此您可能需要使用:nextSibling

item.nextSibling.nextSibling.style.display = 'none'
Run Code Online (Sandbox Code Playgroud)

nextElementSibling正如Bergi建议的那样,另一种选择是使用.但是,并非所有浏览器都支持这种功能.您可以自己创建该功能:

function nextElementSibling(element) {
    do { 
        element = element.nextSibling;
    } while (element && element.nodeType !== 1);
    return element;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下:

nextElementSibling(item).style.display = 'none';
Run Code Online (Sandbox Code Playgroud)

最后但并非最不重要的是,如果你想用原生JS 取代jQuery ,我建议看看Palash的回答$.each().

  • 请注意,这将考虑所有节点类型,因此如果在第一个元素后面有文本节点(或注释或其他非元素节点),则可能会出现意外结果.`nextElementSibling`是这项工作的正确工具,但遗憾的是并不是每个地方都支持. (3认同)
  • @FrédéricHamidi:添加了另一种选择. (2认同)