使getelementbyid复数

时间:2012-07-03 17:01:30

标签: javascript jquery html css getelementbyid

在下面的代码(或任何地方)的上下文中,getelementbyid函数是否可以多个工作?或者我需要一个不同的功能,或者可能是Jquery?

<script type="text/javascript">
    window.onload = function() 
    {
    var test = document.getElementById('test');
    if (test) 
        {
        test.className = 'unactive';
        test.firstChild.onclick = function() 
            {
            if(this.parentNode.className == 'unactive') {
            this.parentNode.className = 'active';
            } 
            else 
                {
                this.parentNode.className = 'unactive';
                }
            }
        }
    };
</script>

2 个答案:

答案 0 :(得分:0)

我假设你想使用ID列表对多个元素进行操作。 (如果我错了,你实际上想要选择具有相同ID的多个元素,那么你做了一件坏事,因为ID应该是唯一的。在这种情况下,你应该使用类。)

在jQuery中,您可以使用以逗号分隔的id选择器列表(如$("#foo, #bar, #baz"))来完成此操作,并实现以下功能:

$("#foo, #bar, #baz").addClass("unactive")
.children(":first-child").click(function() {
    var $this = $(this);
    var $parent = $this.parent();
    $parent.toggleClass("active unactive");
});

没有jQuery,这个小函数会获取一个ID列表并生成一个节点数组:

document.getElementsByIdList() {
    var results = [];
    for(var i=0; i<arguments.length; ++i) {
        results.push(document.getElementById(arguments[i]));
    }
    return results;
}

使用当前代码:

var myNodeArray = document.getElementsByIdList("foo", "bar", "baz");
for(var i=0; i<myNodeArray.length; ++i) {
    var test = myNodeArray[i];
    if(test) {
        // your code goes in here...
    }
}

答案 1 :(得分:0)

你可以使用它;

document.getAllById = function(id){
    if(document.all)
        return document.all[id];
    var elements = [],
    all = document.getElementsByTagName('*');
    for(var i=0;i<all.length;i++)
        if(all[i].getAttribute('id')===id)
            elements.push(all);
    return elements;
}

无论如何,正如@Pointy所说,id属性应该是唯一的,而class用于定义一个或多个具有某些共同属性的元素