Javascript HTMLCollection对象在firefox10中无法正常工作

时间:2012-02-03 08:57:07

标签: javascript firefox

我使用HTML集合对象作为数组并将元素添加到其中。以下代码,

var claimantEmailValues = document.getElementsByName("claimantEmails");
var defendantEmailValues = document.getElementsByName("defendantEmails");


var k = defendantEmailValues.length;
for(var i=0; i<claimantEmailValues.length;i++){
        defendantEmailValues[k++] = claimantEmailValues[i];
}

最后,defendantEmailValues的长度应为4,因为我有两个HTML输入元素,分别用于claimantEmailsdefendantEmails。相反,长度为2,没有错误。除了firefox 10之外,它在firefox的所有版本中运行良好。你能解释一下原因吗?

1 个答案:

答案 0 :(得分:3)

JavaScript数组是具有 magic length属性的对象,当您将数字属性设置为等于或高于当前长度时,该属性会增加。 HTMLCollection个对象具有length属性,但它不是 magic ,并且在设置数字属性时不应该增加。当您向它们添加元素时,您实际上只是使用数字作为属性名称向对象添加命名属性。

最好先使用Array.prototype.slice将集合转换为数组:

var slice = Array.prototype.slice,
    claimantEmailValues = slice.call(document.getElementsByName("claimantEmails")),
    defendantEmailValues = slice.call(document.getElementsByName("defendantEmails"));

var k = defendantEmailValues.length;
for(var i=0; i<claimantEmailValues.length;i++){
        defendantEmailValues[k++] = claimantEmailValues[i];
}

以前的Firefox版本的行为很可能是错误地允许将项目添加到HTMLCollection个实例,而这个错误只是在Firefox 10中修复过。