jQuery каждый - объединение (это) со спецификацией класса
Я пытаюсь перебрать некоторые строки таблицы. Упрощенные строки следующие:
<table>
<tr id="ucf48">
<td class="ucf_text">
<input name="ucf_t48" value="Ann becomes very involved in the text she is reading." type="text">
</td>
</tr>
<tr id="ucf351">
<td class="ucf_text">
<input name="ucf_t351" value="Ann is a fast and confident reader." type="text">
</td>
</tr>
</table>
Я использую этот код для цикла:
$('#ucf tr').each(function(i,obj){
var cn=$(this).attr('id').substr(3);
var t=$(this +'.ucf_text input').val();
console.log("Row "+i);
console.log("Cnum: "+cn);
console.log(t);
});
Консольный вывод:
Row 0
Cnum: 48
Ann becomes very involved in the text she is reading.
Row 1
Cnum: 351
Ann becomes very involved in the text she is reading.
Теперь, прежде чем кто-то разозлит меня, я знаю, что могу сделать это по-другому, ссылаясь на данные, которые я хочу, используя "имя". Почему, однако, моя переменная cnum следует 'this', а переменная t - нет?
Благодарю.
5 ответов
Когда вы делаете:
var t=$(this +'.ucf_text input').val();
this
неправильно конвертируется в строку.
Пытаться:
var t=$(this).find('.ucf_text input').val();
Вы не можете объединять объекты и строки DOM.
Вы можете легко исправить это, указав this
в качестве контекста селектора:
var t = $('.ucf_text input', this).val();
При этом селектор сопоставляет только элементы внутри данного контекста, то есть строки таблицы в вашем случае.
var t=$(this +'.ucf_text input').val();
Вы пытаетесь объединить строку с узлом DOM. Я полагаю, вы хотите детей из каждого ряда? Который будет:var t=$(this).find('.ucf_text input').val();
У вас уже есть 2 правильных ответа, но просто ради разнообразия вот еще один способ сделать это:
var t = $('.ucf_text input', this).val();
На самом деле это потому, что $(this)
[tr] не имеет класса .ucf_text
Я думаю, что вы имели в виду тд под этим
Добавьте пробел, чтобы показать, что вы имеете в виду ребенка.:)
var t=$(this +' .ucf_text input').val();
^ Space!
РЕДАКТИРОВАТЬ: Или нет!
var t=$(this).children('.ucf_text').children('input').val();
Find намного круче, но я редактирую, чтобы не оставить неправильный ответ, и хотел быть несколько оригинальным, и, кроме того... Может быть, вам нужен четкий путь для ввода?