3

我想将数组值分配给 DOM 中的属性:

var myArray = [1, 2, 3];
elem.setAttribute('value', myArray)

在现代浏览器中,您会得到以下结果:

<input value="1,2,3">

但在较旧的(最高 IE9)中:

<input value="[object]">

JSON.stringify不是解决方案,因为这将产生:

<input value="[1,2,3]">

问题是myArray.toString()在现代浏览器中输出:

1,2,3

而在较旧的:

[object]

我该如何解决这个问题?

4

2 回答 2

1

如果您打算使用该toString方法,则可以像这样覆盖它:

var myArray = [1, 2, 3];

Array.prototype.toString = function () {
    return this.join(', ');
}

console.log(myArray.toString()); //1, 2, 3

这应该适用于大多数旧版浏览器。

小提琴:http: //jsfiddle.net/KyleMuir/KUzZL/

于 2013-10-28T08:16:19.103 回答
0

使用JSON.stringify(array)而不是.toString(). 此外,您可以编写这样的函数,将数组转换为字符串。

function arrayToString(array) {
   var arrayStr = JSON.stringify([1, 2, 3]);
   arrayStr = arrayStr.substring(1);
   arrayStr = arrayStr.substring(0, arrayStr.length -1);
   return arrayStr;
}

甚至更短:

var str = array.join(",");

例子:

arrayToString([1, 2, 3, 4]); // returns "1, 2, 3, 4"

此外,您可以扩展Array覆盖toString()函数的原型:

Array.prototype.toString = function () {
    return this.join(",");
}
于 2013-10-28T08:12:36.643 回答