在 javascript 中创建 parents children 的数组

Create an array of a parents children in javascript

我正在尝试创建一个 parent div 的 (id="lol") children 的数组,然后他们获取它们以更改 display:none;除了 child 和 id="a"。我已经试过了,但没有用。我该如何改进才能让它发挥作用?

function myFunction() {

  var x = document.getElementById('a');

  var children = [].slice.call(document.getElementById('lol').getElementsByTagName('*'),0);
  var arrayLength = children.length;          

  for (var i = 0; i < arrayLength; i++) {
    var name = children[i].getAttribute('id');
    var z = document.getElementById(name);
    z.style.display = 'none';
  }
  x.style.display = 'block';
} 

如果每个 child 都有一个 id 属性,那么它将起作用。否则,某些 children 可能没有 id 属性,在这种情况下,变量 z 将是 undefined 并且访问 style 属性 over zundefined 会报错。简单的修复就是处理 undefined 变量:

   if(z)      
       z.style.display = 'none';

变量 x 也是如此。

使用 jQuery 怎么样?

$('#lol').children(':not(#a)').hide();

如果 jQuery 不是一个选项,您可以这样做:

var lol = document.getElementById('lol');
var children = lol.querySelectorAll(':not(#a)');
for(var i=0;i<children.length;i++) {
    children[i].style.display = 'none';
}

更多"low-level":

var lol = document.getElementById('lol');
var children = lol.childNodes;
for(var i=0;i<children.length;i++){
    if(children[i].id != 'a') {
        children[i].style.display = 'none';
    }
}
function myFunction() {


  var children = [].slice.call(document.getElementById('lol').getElementsByTagName('*'),0);
  var arrayLength = children.length;          

  for (var i = 0; i < arrayLength; i++) {
   children[i].style.display = 'none';
  }
  document.getElementById('a').style.display = 'block';
}