Javascript getElementsByTagName返回字符串

Javascript getElementsByTagName返回字符串,javascript,Javascript,我的最终目标是获得单选按钮列表并选中/取消选中它们。这是我的密码: for (var radio in document.getElementsByTagName('input')) { if(typeof (radio) != "string") alert(radio); } 警报从未被调用 对document.getElementsByTagName的调用返回一个从0到列表长度的字符串列表,因此它们的所有属性(类型、id等)都未定义

我的最终目标是获得单选按钮列表并选中/取消选中它们。这是我的密码:

    for (var radio in document.getElementsByTagName('input')) {
        if(typeof (radio) != "string")
            alert(radio);
    }
警报
从未被调用

对document.getElementsByTagName的调用返回一个从0到列表长度的字符串列表,因此它们的所有属性(类型、id等)都未定义,我无法对它们做太多处理

我做错什么了吗?为什么不为这些元素返回对象


这在Firefox4和chrome中,如果有帮助的话。

尝试使用普通的for循环。for(x in obj)循环对象的属性,而不是数组的实际元素

var els = document.getElementsByTagName("input");
for ( var i=0; i<els.length; i++ ) {
    var radio = els[i];
    if ( typeof(radio) != "string" ) {
        alert(radio);
    }
}
var els=document.getElementsByTagName(“输入”);

for(var i=0;i尝试使用普通for循环。for(x in obj)循环对象的属性,而不是数组的实际元素

var els = document.getElementsByTagName("input");
for ( var i=0; i<els.length; i++ ) {
    var radio = els[i];
    if ( typeof(radio) != "string" ) {
        alert(radio);
    }
}
var els=document.getElementsByTagName(“输入”);

for(var i=0;i
getElementsByTagName
返回一个
NodeList
对象,该对象类似于
Array
,因为它将任意数字索引原型化到该对象上

您应该not使用
for..in
循环通过
节点列表进行枚举

为什么?

因为
for..in
迭代对象的所有属性,这将导致
NodeList
中存在额外的不需要的属性以及任意原型索引 在它上面(顺便说一下,这也是属性。)

由于您正在迭代索引,因此保证不会得到除
domeElement
对象之外的任何对象。因此,您不需要
类型的
检查

所以,我想你是有意这么做的:

var els = document.getElementsByTagName('input');
for(var i = 0, j = els.length; i < j; i++) {
   alert(els[i]);
}

getElementsByTagName
返回一个
NodeList
对象,该对象是
数组
——类似于它将任意数字索引原型化到它上面

您应该not使用
for..in
循环通过
节点列表进行枚举

为什么?

因为
for..in
迭代对象的所有属性,这将导致
NodeList
中存在额外的不需要的属性以及任意原型索引 在它上面(顺便说一下,这也是属性。)

由于您正在迭代索引,因此保证不会得到除
domeElement
对象之外的任何对象。因此,您不需要
类型的
检查

所以,我想你是有意这么做的:

var els = document.getElementsByTagName('input');
for(var i = 0, j = els.length; i < j; i++) {
   alert(els[i]);
}

正如其他人所说,
getElementsByTagName
返回一个
NodeList
对象,您需要以不同的方式对其进行迭代。以下是一些实现检查/取消选中收音机的最终目标的方法

使用jQuery

$.each($('input[type="radio"]'), function () {
        if (true) // Your condition for checking true
           $(this).attr('checked','checked');
        else  
           $(this).removeAttr('checked');
    });
var inputs = document.getElementsByTagName('input');
for(var i = 0; i < inputs.length; i++){
    var input = inputs.item(i);
    if(input.type == "radio")
        if (true) // Your condition for checking true
           input.checked = "checked";
        else
           input.removeAttribute("checked");
    }
}
不带jQuery

$.each($('input[type="radio"]'), function () {
        if (true) // Your condition for checking true
           $(this).attr('checked','checked');
        else  
           $(this).removeAttr('checked');
    });
var inputs = document.getElementsByTagName('input');
for(var i = 0; i < inputs.length; i++){
    var input = inputs.item(i);
    if(input.type == "radio")
        if (true) // Your condition for checking true
           input.checked = "checked";
        else
           input.removeAttribute("checked");
    }
}
var inputs=document.getElementsByTagName('input');
对于(变量i=0;i

正如其他人所说,
getElementsByTagName
返回一个
NodeList
对象,您需要以不同的方式对其进行迭代。以下是一些实现检查/取消选中收音机的最终目标的方法

使用jQuery

$.each($('input[type="radio"]'), function () {
        if (true) // Your condition for checking true
           $(this).attr('checked','checked');
        else  
           $(this).removeAttr('checked');
    });
var inputs = document.getElementsByTagName('input');
for(var i = 0; i < inputs.length; i++){
    var input = inputs.item(i);
    if(input.type == "radio")
        if (true) // Your condition for checking true
           input.checked = "checked";
        else
           input.removeAttribute("checked");
    }
}
不带jQuery

$.each($('input[type="radio"]'), function () {
        if (true) // Your condition for checking true
           $(this).attr('checked','checked');
        else  
           $(this).removeAttr('checked');
    });
var inputs = document.getElementsByTagName('input');
for(var i = 0; i < inputs.length; i++){
    var input = inputs.item(i);
    if(input.type == "radio")
        if (true) // Your condition for checking true
           input.checked = "checked";
        else
           input.removeAttribute("checked");
    }
}
var inputs=document.getElementsByTagName('input');
对于(变量i=0;i
是否尝试查找if
document.getElementsByTagName('input')。是否定义了radio
?是否尝试查找if
document.getElementsByTagName('input')。radio
是否定义了?这不是完全正确的,您可以使用
for…in
循环对数组元素进行迭代,但您可能会得到比预期更多的元素(由原型链接引起)。顺便说一句,
typeof(radio)
(您可以省略括号)将始终计算为
object
,正如所有
HTMLElements
所做的那样。这并不完全正确,您可以使用
for…in
循环对数组元素进行迭代,但您可能会得到比预期更多的元素(由原型链接引起)。顺便说一句,
typeof(radio)
(可以省略括号)将始终计算为
对象
,就像所有
HTMLElements
一样。一个
类型的DomeElement
是否会计算为
字符串
?我想你指的是DOM元素的
节点列表
,与数组略有不同-@Russ哇,真不敢相信我忘记了。更新,thanks@MarcelKoppel从不,但
typeof(DomeElement的类型)
总是会的。;-)正如你可能知道的,我是一名.NET开发人员:]谢谢你的帮助!一个
类型的DomeElement
是否会计算为
字符串
?我想你指的是一个DOM元素的
节点列表
,与数组略有不同-@Russ哇,真不敢相信我忘记了。更新,thanks@MarcelKoppel从不,但
typeof(typeof DomeElement)
永远都会。-)正如您可能知道的,我是.NET开发人员:]谢谢您的帮助!