#javascript #jquery #css #html-table
#javascript #jquery — jquery — запрос #css — файл #html-таблица #jquery #css
Вопрос:
У меня есть кнопка редактирования, которая должна сделать содержимое этой таблицы доступным для редактирования. Идентификатор кнопки и класс выглядят следующим образом.
id="edit_icon_'.$row1["client_id"].'_'.$row2["project_id"].'"
class="editbtn"
Идентификатор зависит от значений базы данных. При нажатии этой кнопки я хочу, чтобы все элементы таблицы «только одна таблица» были доступны для редактирования..
<tr>
<td id="edit_elem_'.$row2["project_id"].'_'.$row3["detail_id"].'">'.$row3["elements"].'</td>
<td id="edit_respon_'.$row2["project_id"].'_'.$row3["detail_id"].'">'.$row3["responsibilty"].'</td>
<td id="edit_remark_'.$row2["project_id"].'_'.$row3["detail_id"].'">'.$row3["remarks"].'</td>
</tr>
Вот как выглядят строки таблицы.. Все они имеют динамические идентификаторы.
Как я должен написать селекторы с регулярным выражением, чтобы это сработало?
$(document).on('click', '.editclick', function() { //entering edit mode
var str = $(this).attr("id"); // edit_icon_1_124
var cid = str.replace(/^D |D.*$/g, ""); // 1
var pid = num = str.replace(/.*D/g, ""); // 124
$('').each(function(){ // #edit_*_pid_* -expected, *-wildcard
$(this).attr('contenteditable','true');
});
});
Редактировать: P.S. У меня есть несколько таблиц, сгенерированных на одной странице..
Комментарии:
1. Не создавайте такие сложные идентификаторы. Используйте класс для элементов и присваивайте им некоторые атрибуты данных.
2. Таблица, которую я показал, — это всего лишь фрагмент. Страница содержит несколько генерируемых таблиц, которые будут иметь идентификаторы или классы, отличающиеся переменной, с которой я добавляю ее из базы данных.
Ответ №1:
Для этого вам не нужно РЕГУЛЯРНОЕ выражение. Вы можете использовать data-
атрибут для хранения идентификатора, для редактирования которого предназначена кнопка редактирования.
Кнопка:
<button class='editclick' data-pid="124" data-did="1">Edit</td>
Таблица (добавить класс для каждого did
и pid
):
<tr>
<td id="edit_elem_'.$row2["project_id"].'_'.$row3["detail_id"].'" class="p'.$row2["project_id"].' d'.$row3["detail_id"].'">'.$row3["elements"].'</td>
<td id="edit_respon_'.$row2["project_id"].'_'.$row3["detail_id"].'" class="p'.$row2["project_id"].' d'.$row3["detail_id"].'">'.$row3["responsibilty"].'</td>
<td id="edit_remark_'.$row2["project_id"].'_'.$row3["detail_id"].'" class="p'.$row2["project_id"].' d'.$row3["detail_id"].'">'.$row3["remarks"].'</td>
</tr>
JavaScript:
$(document).on('click', '.editclick', function() { //entering edit mode
var cid = $(this).data('did'); // 1
var pid = num = $(this).data('pid') // 124
$("td.d" did ".p" pid).attr('contenteditable','true');
});
Комментарии:
1. @VPR приведенный выше код работает даже с несколькими таблицами. Знаете ли вы, как делегаты событий работают в JavaScript?
2. @YaronU. Работает как шарм.