Я пытаюсь отформатировать весь столбец таблицы, заменив данные в каждой ячейке строкой.Проще говоря, если я введу «nargles» в поле ввода и нажму кнопку форматирования в верхней части столбца таблицы, текст в каждой ячейке в этом столбце будет заменен на «nargles».Это работает нормально.
Мой вопрос заключается в замене экземпляров "% 0", "% 1", "% 2" и т. Д. Во входной строке значениями таблицы.% 0 соответствует 0-му столбцу,% 1 для 1-го столбца,% 2 для 2-го и т. Д. Кроме того, он должен получить значение столбца для текущей изменяемой строки.
Для пояснения с примером, давайте возьмем таблицу:
1 cat description
2 dog description
3 fish description
Если я введу «Строка% 0 для% 1» для моего ввода и выполню его в 3-м столбце, результат будет:
1 cat Row 1 is for cat
2 dog Row 2 is for dog
3 fish Row 3 is for fish
Надеюсь, это достаточное объяснение =)
Итак, вот пример из таблицы примеров:
<tr>
<td></td>
<td><button class="format" col="1">Format Col</button></td>
<td><button class="format" col="2" >Format Col</button></td>
</tr>
<tr>
<td><input type="text" col="0" row="0" value="0" size="1"></td>
<td><input type="text" col="1" row="0" value="cat" /></td>
<td><input type="text" col="2" row="0" value="description" /></td>
</tr>
...
, а вот код кнопки форматирования вверху каждогоcolumn
$('td button.format').on('click', function () {
// get formatter variables and column number
string = $("#formatter").attr("value");
column = $(this).attr("col");
// regex to globally look for %d (where d is an integer)
var re = new RegExp("\%(\\d+)", "g");
$('td input[col="' + column + '"]').each(function (row) {
// replace string here
});
});
В настоящее время эта структура кода будет захватывать значения 1-го столбца и работает нормально
$('td input[col="' + column + '"]').each(function (i) {
$(this).attr("value", string.replace(re, $('td input[col="1" row="' + i +'"]').attr('value')));
});
Но выполнение чего-то подобного (с вводом "% 2") приведет к"неопределенное 2".(Я заменил col="1"
выше на col="\$1"
и добавил «\ $ 1», чтобы использовать первое найденное соответствующее регулярное выражение).Я должен также отметить, что в дополнение к «\ $ 1» я использовал «$ 1» и «\ $ 1» без удачи.
$('td input[col="' + column + '"]').each(function (i) {
$(this).attr("value", string.replace(re, $('td input[col="\$1" row="' + i +'"]').attr('value') + " \$1"));
});
Мой вывод состоит в том, что время, в которое совпадение с регулярным выражением подставляется вJQuery поиск и время, когда поиск выполняется не правильно.Поскольку результат равен «undefined 2», я знаю, что регулярное выражение совпадает, но поиск неверен.Тем не менее, я знаю, что код в целом правильный, так как жесткое кодирование col="2"
будет работать.
Любые мысли о том, почему это приводит к проблемам.Я хочу сказать, что это проблема синтаксиса, но, возможно, я ошибаюсь.
Sidenote: Этого можно было бы избежать, если бы я просто использовал функцию re.match()
и перебрал возвращаемый массив.Я знаю, что решение существует, я просто смотрю, есть ли более элегантный / более чистый способ сделать это.
Я знаю, что это долго, извините!Я считаю, что больше информации лучше, чем недостаточно.Спасибо за прочтение до конца!