jQuery - split()数组只有一个match = undefined

时间:2010-08-30 10:41:12

标签: javascript jquery arrays

我的split()功能有问题。 我得到错误未定义,但它不知道原因:/

通过一个工作示例更容易解释:http://www.jsfiddle.net/V9Euk/415/

$(function start()
{
    css('#div { font-color:#ff0000; border:1px solid #00ff00; }', '#div_2 { font-color:#ff0000; }', '#line2 { font-color:#00ffff; }');
});


function css(c0,c1,c2)
{
    if(c0 != 'undefined')
    {
        c0_selector = c0.match(/^.*{/);
        c0 = c0.replace(/^.*{/,'');
        c0 = c0.replace(/}/,'');
        c0_arr = c0.split(';');        
        values = new Array();
        values[0] = new Array();
        values[0][0] = c0_selector;  
        for (i = 1; i < c0_arr.length; i++)
        {
            values[0][i]= c0_arr[i].split(':');
        }
    }

    if(c1 != 'undefined')
    {
        c1_selector = c1.match(/^.*{/);
        c1 = c1.replace(/^.*{/,'');
        c1 = c1.replace(/}/,'');
        c1_arr = c1.split(';');  
        values[1] = new Array();        
        values[1][0] = c1_selector;
        for (i = 1; i < c1_arr.length; i++)
        {
            values[1][i]= c1_arr[i].split(':');
        }
    }

    $('#log').append(''+values[0][0]+'<br />');  
    $('#log').append(''+values[0][1][0]+'<br />');          
    $('#log').append(''+values[0][1][1]+'<br />');   
    $('#log').append('<hr />');  
    $('#log').append(''+values[1][0]+'<br />');      
    $('#log').append(''+values[1][1][0]+'<br />');          
    $('#log').append(''+values[1][1][1]+'<br />');       

    $.ajax({
            url: 'test.php',
            type: 'POST',
            dataType: 'json',
            data: $.toJSON(values),
            contentType: 'application/json; charset=utf-8',
            success: function() {
                alert('success');
            }
    });

}

提前致谢! 彼得

2 个答案:

答案 0 :(得分:1)

你已经有了记录你的数组数组的行,是否很难添加记录其他变量的行?

c1_arr = c1.split(';');  

这里创建的数组是['font-color:#ff0000',''] - 有一个空白的第二个元素,因为';'后面没有任何内容在输入字符串中。

然后当你打电话:

values[1][i]= c1_arr[i].split(':');

c1_arr [1]是空字符串,因此值[1] [1]是一个只有一个元素的数组,空字符串。

值[1] [1] [0] - &gt;空字符串 值[1] [1] [1] - &gt; undefined(没有第二个元素)

答案 1 :(得分:1)

您的for循环错误。

c0_arr = c0.split(';');

在此之后你会得到包含东西的索引0和1。

然后你像这样循环:

for (i = 1; i < c0_arr.length; i++)
{
   values[0][i]= c0_arr[i].split(':');
}

从索引1开始。 你应该从索引0开始,并像这样填充你的数值数组:

for (i = 0; i < c0_arr.length; i++)
{
   values[0][i+1]= c0_arr[i].split(':');
}

然后,您将获得他们所属的所有值。

上一个答案清楚地解释了为什么你会得到未定义的错误BTW。