2013-10-28 20 views
3

我想一個數組賦值給DOM中的屬性兼容:如何使與Array.toString()在IE9與現代瀏覽器

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] 

我怎樣才能解決這個問題?

+3

'elem.setAttribute( '值',myArray.join( ''));'應該在任何瀏覽器中運行。 – Teemu

+0

代碼在棧中深處,值自動出現,我無法更改那段代碼。 (可能的值是數字字符串,顯然是數組) –

回答

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/

+1

@John你刪除了「希望這有助於......」爲什麼? –

+0

這並不相關..它就像「嗨」,「謝謝」等。 –

+2

@KyleMuir這是噪音,與答案無關。我確信有一個更好的meta帖子,關於刪除帖子的噪音,但我現在能找到的最好的是[this](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines -and-問候被移除的從 - 職位) – C5H8NNaO4

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(","); 
}