有一个像这样的表:
<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>
我想获得每个表行的第一个td。 然后我想迭代调查结果,并将td中包含的文本值与我拥有的值进行比较。
到目前为止,我可以使用以下内容获得每个tr的第一个td:
var test = $("#table_1").find('td:first-child');
然后我得到tds的数量:console.log(test.length);
但当我尝试获取td的文本时,我收到错误:console.log(test[1].text());
错误:
Uncaught TypeError: test[1].text is not a function
显然我做错了什么。我的思维方式错了吗?我该如何解决?
答案 0 :(得分:2)
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();
<强> Working Demo 强>
答案 1 :(得分:0)
test[1]
将返回底层DOM元素,而.text()
是一个jQuery函数,因此您将收到错误。
我认为,您需要使用.eq()
将匹配元素集合减少到指定索引处的元素。
代码的
test.eq(0).text()
注意:提供的索引是从零开始的,并且是指jQuery对象中元素的位置,而不是DOM树中的位置。
或,使用textContent
test[1].textContent
答案 2 :(得分:0)
在JavaScript中使用 textContent bcoz你正在将jquery对象转换为javascript对象
console.log(test.eq(0).text());
或
console.log(test[0].textContent);
答案 3 :(得分:0)
你必须用jQuery包围,因为结果数组是一个Dom Elements:
for(i = 0; i < test.length; i++){
console.log($(test[i]).text())
}
答案 4 :(得分:0)
试试这个:
var v = 'compare';
$('#table_1 td').each(function () {
if ($(this).text() == v)
console.log($(this).text()+' is equal with the variable '+v);
})
答案 5 :(得分:0)
console.log(test[1].text());
测试 - &gt;是一个htmlDomElement数组
当你说test[1] ->
它给你一个htmlElement而不是该元素的jQuery对象时,所以你不能使用jQuery函数的.text()
。
用$(test[1]).text()
包裹它以使jQuery对象在其上使用text()
函数。