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);
    })
Другие вопросы по тегам