Javascript jQuery正在查找<;的子元素;表>;?
我试图用jquery为“表”的每个“tr”子元素执行一个函数,但这段代码没有标识子元素。我以前在基于“div”的设计中使用过这段代码,如果我将“table”和“tr”标记更改为“div”,它将非常有效,但它不会在这里运行! 这是一个简单的设计:Javascript jQuery正在查找<;的子元素;表>;?,javascript,jquery,html,Javascript,Jquery,Html,我试图用jquery为“表”的每个“tr”子元素执行一个函数,但这段代码没有标识子元素。我以前在基于“div”的设计中使用过这段代码,如果我将“table”和“tr”标记更改为“div”,它将非常有效,但它不会在这里运行! 这是一个简单的设计: <table id="tblSearch" border="1px"> <tr> <td>Hello</td> </tr> <tr>
<table id="tblSearch" border="1px">
<tr>
<td>Hello</td>
</tr>
<tr>
<td>Hey</td>
</tr>
<tr>
<td>Hi</td>
</tr>
<tr>
<td>There!</td>
</tr>
</table>
<table>
<tr align="center">
<input id="btnSearch" type="button" value="Search" />
</tr>
</table>
请注意,警报只运行一次!我还删除了JSFIDLE中用于儿童的“tr”,使代码可以运行。。。
有人能帮我吗?您提供的问题中有多个问题:
td
元素放置在每个tr
children('tr')
,因为没有tr
是table
元素的子元素(仅tbody
,thead
等),而是需要调用find()
jQuery函数(例如find('td')
)从那里你可以得到单元格的文本;但是,在这种情况下,您也可以找到tr
,并获取整行的文本tr
元素不是表的子元素,而是(或thead
或tfoot
)的子元素。如果未指定tbody
元素,则会自动创建该元素。如果检查生成的DOM,您可以自己轻松地解决这个问题
长话短说,使用搜索所有子代。查找
$("#tblSearch").find("tr")
// simpler:
$("#tblSearch tr")
或者在选择器中包含tbdoy
:
$("#tblSearch").children("tbody").children("tr")
// simpler:
$("#tblSearch > tbody > tr")
也就是说,您还必须在td
元素中添加实际内容,如其他答案中所述
如果您不熟悉HTML和表格,请阅读。有两个问题,无效的HTML和选择器错误
<table id="tblSearch" border="1px">
<tr>
<td>Hello</td>
</tr>
<tr>
<td>Hey</td>
</tr>
<tr>
<td>Hi</td>
</tr>
<tr>
<td>There!</td>
</tr>
</table>
演示:首先修复html并在单元格数据周围添加正确的标记
那么这应该可以满足您的需求:
$('table#tblSearch tr').children().each(function(){
alert($(this).text());
});
你根本不需要使用儿童。您只需创建一个选择器-
$('#tblSearch tr td')
工作演示-
首先,您需要修复HTML结构,将子td元素放在每个tr-
<table id="tblSearch" border="1px">
<tr>
<td>Hello</td>
</tr>
<tr>
<td>Hey</td>
</tr>
<tr>
<td>Hi</td>
</tr>
<tr>
<td>There!</td>
</tr>
</table>
<div>
<input id="btnSearch" type="button" value="Search"/></td>
</div>
注意-这将根据需要分别警告每个值。问题是:
表
自动将tbody
元素插入DOM,因此您不应将TR
作为表
元素的子元素引用
- 您引用了不存在的
text
属性,而不是jQuerytext()
函数
- 无论如何,您可能希望引用
td
s(并且可能在每行中只引用一个特定的td),因为返回整行的文本(TR
)在HTML中很少有意义
JSFiddle:
#tblSearch td:first child
选择器基本上是这样说的:“用id=tblSearch
查找元素,然后搜索任何td
元素,它们是其父元素的first child
。注意,我在JSFIDLE中添加了第二列虚拟TDs单元格,以便您可以在实践中看到这一点
有很多选择器可以选择特定的孩子,它们会根据你的具体需求而有所不同,但这只需要对你的html进行一点研究就可以了。你的tr
里面没有td
,我认为不是这样。我已经删除了“td”“此处仅为简单起见。如果您通过减少示例来引入新问题,我们如何知道真正的问题是什么?哦,对不起。我会记住的!:)如果省略tbody
,则tr
元素作为表的直接子元素是完全可以接受的。链接的MDN文档说明了这一点。我从来没有说过它不是。但是选择器不起作用,因为tbdoy
是自动创建的。谢谢@Felix,你解决了我的问题。我不知道tbody。@spender:实际上看起来tr
元素在HTML4()中不是有效的子元素,但它们在HTML5()中是有效的。@spender:另外,我也不确定HTML到底是如何转换为DOM的,但是如果我们假设它使用DOM API添加行,insertRow
方法会声明“此外,当表为空时,该行将插入到创建并插入表的TBODY中。”。可以在HTML4和HTML5中找到。这将解释为什么会创建TBODY
元素(这是我唯一能找到的关于此主题的内容).就像菲利克斯一样,谢谢你,阿伦。身体是个大问题。谢谢你的小提琴:)
$('#tblSearch tr td')
<table id="tblSearch" border="1px">
<tr>
<td>Hello</td>
</tr>
<tr>
<td>Hey</td>
</tr>
<tr>
<td>Hi</td>
</tr>
<tr>
<td>There!</td>
</tr>
</table>
<div>
<input id="btnSearch" type="button" value="Search"/></td>
</div>
$(function () {
$('#btnSearch').click(function () {
$("#tblSearch tr td").each(function(){
alert($(this).text());
});
});
});
$(function () {
$('#btnSearch').click(function () {
var a = $("#tblSearch td:first-child").each(function () {
alert($(this).text());
});
});
});