我想一个表传递给函数,然后使用jQuery获得的行。我在做什么错在这里?
sortTable($('#myTable'));
function sortTable(targetTable)
{
var rows = $(targetTable + ' tr');
}
错误:未捕获的错误:语法错误,不能识别的表达式:[对象的对象] .tr
我认为这个问题是在这里:
sortTable($('#myTable'));
你传递一个targetTable
jQuery object
,所以将它添加到字符串迫使它变成一个字符串,它是[object Object]
。我想你的意思:
sortTable('#myTable');
function sortTable(targetTableSelector) {
var rows = $(targetTableSelector+ ' tr');
}
您可以使用.find()
:
var rows = targetTable.find("tr");
这会发现所有从表开始<tr>
元素,并给您一个包含它们的新的jQuery对象。
你可以得到用于构建一个jQuery对象的选择:
var tableSelector = targetTable.selector;
在这种情况下会是串"#myTable"
。然而,jQuery的对象不会总是选择形成。如果您是通过什么获得类似的事件处理程序表DOM节点的引用,也不会有一个选择。您仍然可以使用.find()
定位从“起点” jQuery对象元素。
需要注意的是.find()
做其工作,为开始的jQuery集合中的所有元素。如果你最初的目的是包括二<table>
元素的集合,然后.find("tr")
会发现一切都桌子底下行。
方法一,通过jQuery对象:
sortTable($('#myTable'));
function sortTable(table) {
var rows = table.find('> tbody > tr');
}
方法二,通过选择器字符串:
sortTable('#myTable');
function sortTable(tableSelector) {
var rows = $(tableSelector).find('> tbody > tr');
}
编辑:(假设你只想要TBODY,而不是头部中的行,否则去掉“> TBODY> TR”)
你在一个jQuery对象传递。不是id
。这意味着,当您连接您的id
您targetTable
参数,你会得到:
[object Object] tr
因此,你会试图选择:
$("[object Object] tr")
这是不是你想要的。相反,你需要在表格中id
传递到您的功能,让你用字符串拼接它,而不是一个对象。
请参见下面的工作例如:
function sortTable(targetTable) {
var rows = $(targetTable + ' tr').toArray();
return rows.toArray();
}
console.log(sortTable('#myTable'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="myTable" border=1>
<tr>
<th>Name</th>
<th>Age</th>
</tr>
<tr>
<td>Bob</td>
<td>23</td>
</tr>
<tr>
<td>John</td>
<td>33</td>
</tr>
</table>