【问题标题】:Children of children Javascript DOM孩子的孩子 Javascript DOM
【发布时间】:2014-03-19 23:43:02
【问题描述】:

假设我有一个带有两个子 div 的 div,它们充当未定义数量的导航按钮的列。 比如

<div id='controls'>
<div id='column1'><a id='button1' href=#></a></div>
<div id='column2'><a id='button2' href=#></a></div>
</div>

我现在就是这样

var column1 = document.getElementById('column1').children;
var column2 = document.getElementById('column2').children;
var button1 = document.getElementById('button1');

button1.onclick = function() {
    column1.className = column1.className.replace(new RegExp('\b' + active + '\b'),'');
    column2.className = column2.className.replace(new RegExp('\b' + active + '\b'),'');
    this.className += ' active';
};

由于我对两者都做同样的事情,有没有办法将它组合成类似的东西:

var controls = document.getElementById('controls').children.children;

var controls = document.getElementById('controls').children;
var controls = controls.children;

【问题讨论】:

    标签: javascript html dom children


    【解决方案1】:

    使用document.querySelectorAll()

    var controls = document.querySelectorAll('#controls > div');
    console.log(controls)
    

    Supports IE8+


    这里的控件是一个数组,所以你需要迭代它们来改变它的属性

    button1.onclick = function () {
        var controls = document.querySelectorAll('#controls > div');
        for (var i = 0; i < controls.length; i++) {
            controls[i].className = controls[i].className.replace(new RegExp('\b' + active + '\b'), '');
        }
        this.className += ' active';
    };
    

    【讨论】:

    • 啊,我明白了。应该是 var controls = document.querySelectorAll('#controls > div a');选择辅助 div 下方的锚元素,还是定位 div 本身?另外,如果每个按钮都有一个通用类 .button (例如),我可以用它来定位它们吗(var controls = document.querySelectorAll('.button');
    • @user3409230 是的......document.querySelectorAll('#controls &gt; div a');,如果你在#controls 中没有任何其他锚元素,那么document.querySelectorAll('#controls a');
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 2011-06-22
    相关资源
    最近更新 更多