Функция attr
:
получает значение атрибута только для первого элемента в соответствующем наборе
Итак, это:
var select_id = $(this).attr('id');
работает, потому что this
является элементом <select>
, поэтому существует только один элемент. <textarea>
один:
var textarea_id = $("tr td textarea").attr('id');
Просто захватывает атрибут id
первого <textarea>
. Если вам нужны все элементы <textarea>
, используйте each
:
$("tr td textarea").each(function() {
var textarea_id = this.id;
var content = $(this).text();
alert(textarea_id);
});
Вам не нужно использовать attr
для получения идентификатора, если у вас есть объект DOM (this
внутри each
), вы можете просто получить доступ к атрибуту напрямую.
Если вы хотите, чтобы <textarea>
находился в той же строке, что и <select>
(как отмечено в комментариях), вы можете использовать closest
, чтобы немного подняться по DOM и затем find
, чтобы вернуться обратно:
var textarea_id = $(this).closest('tr').find('textarea').attr('id');
И в строке таблицы есть несколько элементов <textarea>
, и вы хотите их все, затем объедините оба подхода:
$(this).closest('tr').find('textarea').each(function() {
// ...
});