.each()函数只输出数组中的最后一个结果

时间:2012-06-20 08:30:04

标签: javascript jquery html

我有字符串。然后我将字符串拆分成一个数组。

我使用.each()希望逐个迭代数组并产生一定的输出。

但是,当我尝试这样做时,我只获得输出数组中的值。

怎么来的?

我已经设置了一个jsfiddle来展示我到目前为止所尝试的内容以及我得到的结果:

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

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

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

我正在努力实现这一点,用户输入文本,点击提交并返回输入,但每次点击提交时都会替换当前输出。

8 个答案:

答案 0 :(得分:6)

请参阅此处 http://jsfiddle.net/S7Z6K/4/ http://jsfiddle.net/S7Z6K/6/

您正在使用.text

覆盖旧的结果集

在代码中,您可以看到我将旧结果集附加到新结果集,因此一切正常。

希望这有帮助!

<强>码

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

答案 1 :(得分:4)

您正在重复地将输出元素的值设置为每个连续的数组值,并且您将看到的唯一值是设置的最后一个值,这确实是您的jsFiddle显示的值。

.text()用新内容替换当前内容。它不会向已经存在的内容添加内容。

如果你描述了你想要解决的实际问题,我们可以更好地建议使用什么代码。我怀疑你真的想要使用.append(),因为将一个字符串拆分成它的碎片是愚蠢的,然后再一次将它们全部追加到一个字符。你必须要做一些比这更有趣的事情。

答案 2 :(得分:3)

您在此处所做的只是在每次迭代时覆盖.text()的{​​{1}}值。

您应该尝试使用#output功能。

.append()

或者,为了解释起见,你也可以这样做 -

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

答案 3 :(得分:3)

试试这个......

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

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

答案 4 :(得分: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);
    });​

答案 5 :(得分: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>');
    });
});

答案 6 :(得分: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

答案 7 :(得分:-1)

text()函数不会将文字附加到output,因此您看到的是上次替换的结果