3

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

我曾经.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);
});​

我试图在用户输入文本、点击提交并将输入返回给他们的地方实现它,但每次他们点击提交时,它都会替换当前输出。

4

8 回答 8

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);
    });​
于 2012-06-20T08:33:07.193 回答
4

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

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

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

于 2012-06-20T08:32:45.863 回答
3

您在这里所做的只是在每次迭代.text()中覆盖 的值。#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);
于 2012-06-20T08:32:53.343 回答
3

尝试这个....

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

$.each(stringArray, function(index, value){
    $('#output').append(index + ' : ' + value);
});​
于 2012-06-20T08:33:20.907 回答
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;
        });
    });

演示

于 2012-06-20T08:41:16.250 回答
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);
    });​
于 2012-06-20T08:32:58.810 回答
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>');
    });
});
于 2012-06-20T08:33:58.987 回答
-1

text()函数不会附加文本,output所以你看到的是最后替换的结果

于 2012-06-20T08:35:45.687 回答