2012-06-20 46 views
3

我有字符串。然後我分割字符串來創建一個數組。.each()函數僅輸出數組中的最後一個結果

我使用.each()希望逐個遍歷數組併產生一定的輸出。

但是,當我嘗試這樣做時,我只獲取輸出數組中的值。

怎麼回事?

我已經設置了的jsfiddle到demonstate我所到目前爲止已經試過,結果我得到:

http://jsfiddle.net/S7Z6K/2/

var string = 'this is a string'; 
stringArray = string.split(''); 

$.each(stringArray, function(index, value){ 
    $('#output').text(index + ' : ' + value); 
});​ 

我想實現它,其中用戶輸入文本,點擊提交併返回給他們的輸入,但每次點擊提交時都會替換當前的輸出。

回答

6

看到這裏http://jsfiddle.net/S7Z6K/4/http://jsfiddle.net/S7Z6K/6/

您覆蓋舊的結果與.text

設置在代碼中,您可以看到我附加了舊的結果集t o新的,因此一切都很好。

希望這有助於!

代碼

var string = 'this is a string'; 
    stringArray = string.split(''); 
    var hulkfoo = ""; 
    $.each(stringArray, function(index, value){ 
     hulkfoo += index + ' : ' + value + " -- "; 
     $('#output').text(hulkfoo); 
    });​ 
4

您在輸出元素的值反覆設置爲每個連續的數組值,你會看到只有一個是設置的最後一個值,這確實正是您的jsfiddle顯示。

.text()替換新的內容的當前內容。它不會將內容添加到已有的內容中。

我們可以建議更好,如果你描述你試圖解決實際問題用什麼代碼isntead。我懷疑你真的想用.append(),因爲這是愚蠢的字符串分割成它的棋子,然後就在同一時間一起再次一個字符添加他們。你一定想要做一些比這更有趣的事情。

+0

看到更新..... – RSM

3

你在這裏做的只是覆蓋值#output每次迭代。

您應該嘗試使用.append()函數。

$.each(stringArray, function(index, value){ 
    $('#output').append(index + ' : ' + value); 
});​ 

另外,爲了說明的緣故,你也可以做這樣的事情 -

var element = $('#output') // use cache to improve performance 
element.text(element.text() + index + ' : ' + value); 
2

你不斷更新#output,而且停留的唯一的事情是最後一次迭代的VAL。

嘗試.append(),而不是文本 更新演示:http://jsfiddle.net/epinapala/S7Z6K/5/

var string = 'this is a string'; 
    stringArray = string.split(''); 
    alert(stringArray); 
    $.each(stringArray, function(index, value){ 
     $('#output').append(index + ' : ' + value); 
    });​ 
3

試試這個....

var string = 'this is a string', 
    stringArray = string.split(''); 

$.each(stringArray, function(index, value){ 
    $('#output').append(index + ' : ' + value); 
});​ 
2

這是因爲text()功能將取代你的元素的內部文本,每一次,它被稱爲。您可以簡單地用append()替換文本,以便附加文本,儘管這不會被格式化。

如果你想格式化你的輸出,你可以做這樣的事情; http://jsfiddle.net/S7Z6K/8/

var string= 'this is a string'; 
stringArray = string.split(''); 

$.each(stringArray, function(index, value){ 
    var div = $('<div></div>').text(index + ' : ' + value) 
    $('#output').append(div); 
}); 

要清除輸出和更新每個按鈕被按下的時間,使他們每次點擊提交它所取代的電流輸出,你可以這樣做以下; http://jsfiddle.net/S7Z6K/15/

$('#submit').click(function(){ 

    var value = $('#value').val(); 
    var array = value.split(''); 
    var output = $('#output'); 
    output.empty(); 
    $.each(array, function(index, value){ 
     output.append('<div>' + index + ' : ' + value + '</div>'); 
    }); 
}); 
-1

text()功能不添加文字output所以你看到的是最後的結果替換

2
var string = 'this is a string'; 
    stringArray = string.split(/\s/); 

    $.each(stringArray, function(index, value){ 
     $('#output').text(function(i, oldText) { 
      return oldText += index + ' : ' + value; 
     }); 
    }); 

DEMO

相關問題