jQuery:在一行onclick函数中指定子节点的索引

时间:2010-11-16 20:15:04

标签: jquery jquery-selectors

我有一个表行的click函数,需要传递行中前两个tds的内容。

// Assign a click handler to the rows
$('#supportTables1 tr').click(function ()
{
    var firstTd = $(this).find('td').html();
    //need to get the next td.  below line doesn't work.
    var secondTd = $(this).find('td')[1].html();
    window.open('snglContactList.php'+'?search_word='+firstTD+'?list_name=secondTd);
});

我可以得到第一个td就好了,但是我很难理解我访问第二个td非常简单的问题(我尝试过设置它的索引的不同方法)。

3 个答案:

答案 0 :(得分:5)

数组表示法[1]返回一个DOM元素,而不是jQuery对象,所以你不能在它上面使用.html()(一个jQuery方法)。使用jQuery函数.eq()来获取元素:

  // Assign a click handler to the rows
  $('#supportTables1 tr').click(function ()
  {
        var firstTd = $(this).find('td').eq(0).html();
        var secondTd = $(this).find('td').eq(1).html();
        window.open('snglContactList.php'+'?search_word='+firstTD+'?list_name='+secondTd);
  });

答案 1 :(得分:0)

表行拥有自己包含的单元格集合,可由cells属性访问。

这样做:

var firstTd = this.cells[ 0 ].innerHTML;
var secondTd = this.cells[ 1 ].innerHTML;

或者你坚持使用jQuery解决方案,执行此操作:

var firstTd = $(this.cells[ 0 ]).html();
var secondTd = $(this.cells[ 1 ]).html();

示例: http://jsbin.com/ivabu4/

请注意,第一个版本最快,因为它直接访问属性。

答案 2 :(得分:0)

$(this).find('td')将返回所有< td>在单击的行内。您可以使用eq(idx)方法获取特定索引的值:

$('#supportTables1 tr').click(function ()
{
    var tds = $(this).find('td');
    var firstTd = tds.eq(0).text();
    var secondTd = tds.eq(1).text();
    window.open('snglContactList.php'+'?search_word='+firstTD+'?list_name='+secondTd);
});

这里的工作示例(使用警报而不是window.open ...):

http://jsfiddle.net/E5Z5V/