jQuery « Подстановка значений из массива

Есть массив данных:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .javascript.geshi_code {font-family:monospace;} .javascript.geshi_code .imp {font-weight: bold; color: red;} .javascript.geshi_code .kw1 {color: #000066; font-weight: bold;} .javascript.geshi_code .kw2 {color: #003366; font-weight: bold;} .javascript.geshi_code .kw3 {color: #000066;} .javascript.geshi_code .co1 {color: #006600; font-style: italic;} .javascript.geshi_code .co2 {color: #009966; font-style: italic;} .javascript.geshi_code .coMULTI {color: #006600; font-style: italic;} .javascript.geshi_code .es0 {color: #000099; font-weight: bold;} .javascript.geshi_code .br0 {color: #009900;} .javascript.geshi_code .sy0 {color: #339933;} .javascript.geshi_code .st0 {color: #3366CC;} .javascript.geshi_code .nu0 {color: #CC0000;} .javascript.geshi_code .me1 {color: #660066;} .javascript.geshi_code span.xtra { display:block; }

var prod = [];
prod[0] = ['ппп', 'AJ0310404', '289,19'];
prod[1] = ['ввв', '995641400', '94,94'];
...
 

в html:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .html4strict.geshi_code {font-family:monospace;} .html4strict.geshi_code .imp {font-weight: bold; color: red;} .html4strict.geshi_code .kw2 {color: #000000; font-weight: bold;} .html4strict.geshi_code .kw3 {color: #000066;} .html4strict.geshi_code .es0 {color: #000099; font-weight: bold;} .html4strict.geshi_code .br0 {color: #66cc66;} .html4strict.geshi_code .sy0 {color: #66cc66;} .html4strict.geshi_code .st0 {color: #ff0000;} .html4strict.geshi_code .nu0 {color: #cc66cc;} .html4strict.geshi_code .sc-1 {color: #808080; font-style: italic;} .html4strict.geshi_code .sc0 {color: #00bbdd;} .html4strict.geshi_code .sc1 {color: #ddbb00;} .html4strict.geshi_code .sc2 {color: #009900;} .html4strict.geshi_code span.xtra { display:block; }

<tr>
  <td class="prodname">prod[74,0]</td>
  <td class="prodnum">prod[74,1]</td>
  <td class="mprice_el">prod[74,2]</td>
</tr>
<tr>
  <td class="prodname"> prod[8,0]</td>
  <td class="prodnum">prod[8,1]</td>
  <td class="mprice_el">prod[8,2]</td>
</tr>
 

Вызывается функция для подстановки значений из массива:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .javascript.geshi_code {font-family:monospace;} .javascript.geshi_code .imp {font-weight: bold; color: red;} .javascript.geshi_code .kw1 {color: #000066; font-weight: bold;} .javascript.geshi_code .kw2 {color: #003366; font-weight: bold;} .javascript.geshi_code .kw3 {color: #000066;} .javascript.geshi_code .co1 {color: #006600; font-style: italic;} .javascript.geshi_code .co2 {color: #009966; font-style: italic;} .javascript.geshi_code .coMULTI {color: #006600; font-style: italic;} .javascript.geshi_code .es0 {color: #000099; font-weight: bold;} .javascript.geshi_code .br0 {color: #009900;} .javascript.geshi_code .sy0 {color: #339933;} .javascript.geshi_code .st0 {color: #3366CC;} .javascript.geshi_code .nu0 {color: #CC0000;} .javascript.geshi_code .me1 {color: #660066;} .javascript.geshi_code span.xtra { display:block; }

function fill(){
  $('.prodname,.prodnum,.mprice_el').text(function(i,t){
    var p = t.match(/^prod[(d+?),(d+?)]$/i);
    return prod[p[1]][p[2]];
  });
}
 


Вроде как работает, но есть ряд проблем:
1. Если перед или после тега "prod[74,0]" есть какой-то текст - вся функция крешится и не считает все, что ниже. Как сделать, чтобы не учитывала значения до/после?

2. При работе в консоль выводится ошибка: Uncaught TypeError: Cannot read property '1' of null Из-за чего?

3. После вызова этой функции последующие функции не работают.

Помогите допилить!

1 ответов


Начну с конца:
3. После функции ничего не работает потому что в процессе исполнения происходит краш
2. Пытается достать из массива несуществующий элемент
1. Вы изначально начали делать неправильно.

Уж раз вы решили заниматься шаблонизацией на javascript, что вцелом не самая лучшая затея, вероятно, то уж делайте это без регулярных выражений.
http://jtemplates.tpython.com/
http://plugins.jquery.com/project/jquerytemplate
https://github.com/trix/nano
http://beebole.com/pure/
http://aefxx.com/jquery-plugins/jqote/