2010-08-30 6 views
0

J'ai un problème avec la fonction split(). je reçois l'erreur non définie mais ne sais pas pourquoi:/jQuery - split() tableaux avec un seul match = undefined

Il est plus facile d'expliquer avec un exemple de travail: 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'); 
      } 
    }); 

} 

Merci à l'avance! Peter

Répondre

1

Votre pour les boucles sont fausses.

c0_arr = c0.split(';'); 

Vous obtenez les index 0 et 1 contenant des éléments après cela.

Et puis vous en boucle comme ceci:

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

À partir de l'index 1. Vous devriez commencer à l'index 0, et remplissez vos valeurs tableau comme ceci:

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

vous obtiendrez toutes vos valeurs là où elles appartiennent.

La réponse précédente explique clairement pourquoi vous obtenez l'erreur non définie BTW.

1

Vous avez déjà les lignes enregistrant votre tableau de valeurs, était-ce si difficile d'ajouter des lignes de journalisation des autres vars?

c1_arr = c1.split(';'); 

Le tableau créé ici est [ « couleur de la police: # FF0000 », « »] - il y a un deuxième élément vide car il n'y a rien après la « ; » dans la chaîne d'entrée.

Quand vous appelez:

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

c1_arr [1] est une chaîne vide, donc les valeurs [1] [1] est un tableau avec un seul élément, chaîne vide.

valeurs [1] [1] [0] -> chaîne vide valeurs [1] [1] [1] -> non défini (pas de deuxième élément)