-2

在下面(或任何地方)代码的上下文中,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>
4

2 回答 2

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...
    }
}
于 2012-07-03T17:15:40.220 回答
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用于定义一个或多个具有某些共同属性的元素

于 2012-07-03T17:36:13.373 回答