#jquery
#jquery
Вопрос:
У меня есть таблица следующего вида, и после нажатия кнопки редактирования я хочу прочитать значения ее строк из идентификаторов td
<table>
<tr>
<td id="Name">111</td>
<td id="surname">aaaa</td>
<td><input type="button" id="edit" value="edit"/></td>
</tr>
<tr>
<td id="Name">123</td>
<td id="surname"></td>vvv
<td><input type="button" id="edit" value="edit"/></td>
</tr>
<tr>
<td id="Name">122</td>
<td id="surname">vvvvv</td>
<td><input type="button" id="edit" value="edit"/></td>
</tr>
</table>
Комментарии:
1. У вас не может быть нескольких элементов с одинаковым идентификатором.. Вместо этого вам следует использовать
class
, что позволило бы вам использовать$$('.className')
для получения всех элементов с определенным именем класса2. К сожалению, ваша HTML-разметка полна ошибок. Id-атрибуты всегда уникальны во всем документе, но вы используете id «фамилия» и «редактировать» несколько раз. Вместо этого используйте классы, их использование не ограничено. Чего именно вы хотите достичь? Хотите считывать идентификаторы при нажатии кнопки или значение td-поля?
Ответ №1:
попробуйте
js
$(document).ready(function(){
$('input[type=button]').click ( function () {
var fName = $(this).parents("tr").find("td.Name").html();
var surName = $(this).parents("tr").find("td.surName").html();
alert('nName:' fName ' surName:' surName 'n');
});
пересмотренный HTML:
<table border=1 cellpadding=5>
<tr>
<td class="Name">111</td>
<td class="surName">aaaa</td>
<td><input type="button" id="edit" value="edit"></td>
</tr>
<tr>
<td class="Name">123</td>
<td class="surName">vvv</td>
<td><input type="button" id="edit" value="edit"></td>
</tr>
<tr>
<td class="Name">122</td>
<td class="surName">vvvvv</td>
<td><input type="button" id="edit" value="edit"></td>
</tr>
ДЕМОНСТРАЦИЯ
Комментарии:
1. Пример отличный, но пересмотренный HTML-код должен решить проблему неуникального идентификатора — т. Е. Ответ не должен включать что-то неправильное. (идентификатор = «Name» используется несколько раз)
2. Поскольку parents() вернет всех предков, предпочтительно использовать closest().
Ответ №2:
Есть несколько проблем с вашей разметкой. Во-первых, идентификаторы всегда должны быть уникальными. Если вы хотите применить общее имя к нескольким элементам, то класс был бы лучшей идеей. Также вам, похоже, не хватает некоторых строк таблицы. Предполагая, что это исправлено, вы сможете получить доступ к требуемому значению несколькими способами:
<table>
<tr>
<td class="Name">111</td>
<td class="surname">aaaa</td>
<td>
<input type="button" class="edit" value="edit">
</td>
</tr>
<tr>
<td class="Name">123</td>
<td class="surname">vvv</td>
<td>
<input type="button" class="edit" value="edit">
</td>
</tr>
<tr>
<td class="Name">122</td>
<td class="surname">vvvvv</td>
<td>
<input type="button" class="edit" value="edit">
</td>
</tr>
</table>
Предполагая, что это разметка, тогда:
$('.edit').click(function() {
var idVal = $(this).parent().siblings('.Name').html();
alert(idVal);
});
или
$('.edit').click(function() {
var idVal = $(this).closest('tr').find('td:first').html();
alert(idVal);
});
использование областей
$('.edit').click(function() {
var idVal = $('.Name', $(this).closest('tr')).html();
alert(idVal);
});
и т.д…
Ответ №3:
Во-первых, есть довольно много небольших ошибок (в 7-м td отсутствует открывающий тег). Также идентификатор следует использовать только один раз, вы не можете / не должны иметь id=’name’ x3 или id=’family’ x3.
Как только они будут исправлены, вы можете использовать следующий jquery для получения идентификатора:
$("#surname").html(); // where surname is the id
Ответ №4:
Пример для имени:
$('input:button')
.click(function(){alert($(this).closest('tr').find('td[id="Name"]').text());});
(Предполагается, что вы забыли некоторые строки внутри вашего кода)
Но поскольку идентификатор должен быть уникальным, вам лучше удалить идентификаторы и попробовать использовать индекс идентификаторов td:
$('input:button')
.click(function(){alert($(this).closest('tr').find('td:eq(1)').text());});
(Это позволит, например, найти 2-й <td>
, чей идентификатор на самом деле является «фамилией»)