添加元素,通过jQuery选择

问题描述 投票:0回答:4

我想一个表传递给函数,然后使用jQuery获得的行。我在做什么错在这里?

sortTable($('#myTable'));


function sortTable(targetTable)
{
    var rows = $(targetTable + ' tr');
}

错误:未捕获的错误:语法错误,不能识别的表达式:[对象的对象] .tr

javascript jquery
4个回答
3
投票

我认为这个问题是在这里:

sortTable($('#myTable'));

你传递一个targetTable jQuery object,所以将它添加到字符串迫使它变成一个字符串,它是[object Object]。我想你的意思:

sortTable('#myTable');

function sortTable(targetTableSelector) {
   var rows = $(targetTableSelector+ ' tr');
}

0
投票

您可以使用.find()

var rows = targetTable.find("tr");

这会发现所有从表开始<tr>元素,并给您一个包含它们的新的jQuery对象。

你可以得到用于构建一个jQuery对象的选择:

var tableSelector = targetTable.selector;

在这种情况下会是串"#myTable"。然而,jQuery的对象不会总是选择形成。如果您是通过什么获得类似的事件处理程序表DOM节点的引用,也不会有一个选择。您仍然可以使用.find()定位从“起点” jQuery对象元素。

需要注意的是.find()做其工作,为开始的jQuery集合中的所有元素。如果你最初的目的是包括二<table>元素的集合,然后.find("tr")会发现一切都桌子底下行。


0
投票

方法一,通过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”)


0
投票

你在一个jQuery对象传递。不是id。这意味着,当您连接您的idtargetTable参数,你会得到:

[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>
© www.soinside.com 2019 - 2024. All rights reserved.