jquery сначала выбирает td из tr в таблице, затем просматривает результаты и сравнивает текст со значением.
Имея стол вроде:
<table id="table_1">
<tr><td>1</td><td>foo</td></tr>
<tr><td>2</td><td>foo</td></tr>
<tr><td>3</td><td>foo</td></tr>
<tr><td>4</td><td>foo</td></tr>
</table>
Я хочу получить первый тд каждой строки таблицы. Затем я хочу перебрать результаты и сравнить текстовое значение, содержащееся в тд, со значением, которое у меня есть.
До сих пор я могу получить первый тд каждого tr с помощью следующего:
var test = $("#table_1").find('td:first-child');
Тогда я получаю количество тдс: console.log(test.length);
но когда я пытаюсь получить текст td, я получаю сообщение об ошибке: console.log(test[1].text());
Ошибка:
Uncaught TypeError: test[1].text is not a function
Очевидно, я делаю что-то не так. Мой образ мышления неправильный? Как я могу это исправить?
6 ответов
test[1]
вернет базовый элемент DOM и .text()
это функция jQuery, поэтому вы получаете ошибку.
Я думаю, вам нужно использовать .eq()
Сократите набор совпадающих элементов до указанного по указанному индексу.
Код
test.eq(0).text()
Обратите внимание: предоставленный индекс начинается с нуля и относится к позиции элемента в объекте jQuery, а не в дереве DOM.
ИЛИ Использовать textContent
test[1].textContent
test
является объектом jquery всех первых дочерних элементов. Вы должны использовать .eq(0)
или же .first()
нацеливаться на первый элемент в коллекции:
console.log(test.eq(0).text());
или же
console.log(test.first().text());
Обновление: чтобы получить все тексты перво-дочерних элементов td в массиве
var allfirsttdtext = test.map(function(){
return $(this).text();
}).get();
console.log(test[1].text());
test -> это массив htmlDomElement, когда вы говорите test[1] ->
он дает вам htmlElement, а не объект jQuery этого элемента, поэтому вы не можете использовать .text()
которая является функцией jQuery.
Оберните это $(test[1]).text()
сделать его объектом jQuery для использования text()
функционировать на нем.
Используйте textContent в JavaScript, потому что вы конвертируете объект jquery в объект javascript
console.log(test.eq(0).text());
или же console.log(test[0].textContent);
Вы должны окружить jQuery, так как полученный массив - это Dom Elements:
for(i = 0; i < test.length; i++){
console.log($(test[i]).text())
}
Попробуй это:
var v = 'compare';
$('#table_1 td').each(function () {
if ($(this).text() == v)
console.log($(this).text()+' is equal with the variable '+v);
})