jQuery .each:不要在最后一个字段中添加逗号

时间:2013-11-18 09:48:57

标签: javascript jquery

我想获取用逗号分隔的变量中所有字段的值。例如:1,2,3

以下代码可以正常工作,但它也只在最后一个值的末尾添加逗号。我该如何删除?

fields = $('.wrap').find('.text');
var data = '';

fields.each(function() {
    var value = $(this).val();  
    if ( value != '' ) {
        data += ' ' + value + ',';
    }   
});

alert(data);

的jsfiddle: http://jsfiddle.net/cn5Gt/

7 个答案:

答案 0 :(得分:4)

我总是使用数组来做这些事情:

var fields = $('.wrap').find(".text[value!='']");
var data = [];

fields.each(function() {
    data.push($(this).val());
});

alert(data.join(','));

答案 1 :(得分:3)

您可以在数组上推送元素,而不仅仅使用join()方法。

fields = $('.wrap').find('.text');

var data = [];

fields.each(function() {
    var value = $(this).val();  
    if ( value != '' ) {
        data.push(value);
    }   
});

alert(data.join());

答案 2 :(得分:2)

尝试下面的代码,使用i这是循环索引,并根据jQuery对象的长度进行测试。

fields = $('.wrap').find('.text');
var length = fields.length;
var data = '';

fields.each(function(i) {
    var value = $(this).val();  
    if ( value != '' ) {
        if(i === length-1) {  //The last one
            data += ' ' + value;
        } else {
            data += ' ' + value + ',';
        } 
    }   
});

更新了fiddle

答案 3 :(得分:1)

你之后可以删除最后一个角色吗?

data = data.substr(0, data.length - 1);

http://jsfiddle.net/cn5Gt/3/

答案 4 :(得分:1)

最简单:只需将您的最后一行替换为以下行

 alert(data.slice(0,-1));//where data is string

http://jsfiddle.net/cn5Gt/7/

DOC MDN:slice

答案 5 :(得分:1)

这样的事情怎么样:

var data = $('.wrap').find('.text')
                     .map(function(i,el){ return el.value || null; })
                     .get().join(", ");

演示:http://jsfiddle.net/cn5Gt/11/

jQuery的.map() method将“通过函数传递当前匹配集合中的每个元素,生成一个包含返回值的新jQuery对象。”您仍然可以在回调函数中包含if ( value != '' ) {测试,因为如果您的函数返回nullundefined,则.map()将不会使用该特定值。 (我上面用|| null作为if / else结构的快捷方式。)

在结果上调用.get()(或.toArray()),您将拥有一个实际数组,这意味着您可以使用数组.join() method形成一个值为逗号的字符串分离。

如果您需要对每个项目进行其他处理,除了获取值之外,您可以坚持使用.each()循环并将值添加到您在循环之后加入的数组(就像其他一些答案一样) ),或者只使用字符串.slice()方法删除尾随的逗号和空格字符。

答案 6 :(得分:0)

试试这个:

使用长度函数确定每个

的位置
    

    var fields = $('.wrap').find('.text');
    var len    = fields.length;

    var data = '';

    fields.each(function(index, element) {

        var value = $(this).val();  
        if ( value != '' ) {
            data += ' ' + value;
            if (index != len - 1) {
                data += ',';
            }
        }

    });

    alert(data);