16

我正在研究 asp.net mvc 3。我有以下结构,

<tr data-uid="123">
<td>
<a href="#" id="click">Click Me</a>
</td>
</tr>

现在我想找到标签数据属性值。我试过像,

$("a#click").click(function(){
 var i= $(this).parent('td').parent('tr').data('uid');
});

但对我不起作用。请指导我。

4

6 回答 6

39

closest如果不想在每个级别爬上父级,您可以使用该方法获取查询的选择器的最近父级。

$("#click").click(function(e){
    e.preventDefault();

    var $i = $(this).closest('tr').attr('data-uid');
    console.log($i);

    var $j = $(this).closest('tr').data('uid');
    console.log($j);
});​

e.preventDefault()只是为了防止默认操作。如果不需要,可以将其删除。

还要确保您tr包含在表格标签内以使其正常工作..

在这里提琴

于 2012-09-28T16:48:52.797 回答
14

回答

$("a#click").click(function(e){
    e.preventDefault();
    var i = $(this).closest('tr').attr('data-uid');
    console.log(i);
    var j = $(this).closest('tr').data('uid');
    console.log(j);
});

查看演示


如何找到最近的行?

使用.closest()

var $row = $(this).closest("tr");

使用.parent()

检查此.parent()方法。这是 a.prev()和的替代方案.next()

var $row = $(this).parent()             // Moves up from <button> to <td>
                  .parent();            // Moves up from <td> to <tr>

获取所有表格单元格<td>

var $row = $(this).closest("tr"),       // Finds the closest row <tr> 
    $tds = $row.find("td");             // Finds all children <td> elements

$.each($tds, function() {               // Visits every single <td> element
    console.log($(this).text());        // Prints out the text within the <td>
});

查看演示


只获取特定的<td>

var $row = $(this).closest("tr"),        // Finds the closest row <tr> 
    $tds = $row.find("td:nth-child(2)"); // Finds the 2nd <td> element

$.each($tds, function() {                // Visits every single <td> element
    console.log($(this).text());         // Prints out the text within the <td>
});

查看演示


有用的方法

  • .closest()- 获取与选择器匹配的第一个元素
  • .parent()- 获取当前匹配元素集中每个元素的父元素
  • .parents()- 获取当前匹配元素集中每个元素的祖先
  • .children()- 获取匹配元素集中每个元素的子元素
  • .siblings()- 获取匹配元素集中每个元素的兄弟姐妹
  • .find()- 获取当前匹配元素集中每个元素的后代
  • .next()- 获取匹配元素集中每个元素的紧随其后的兄弟
  • .prev()- 获取匹配元素集中每个元素的前一个兄弟元素
于 2014-05-23T13:09:15.523 回答
1

您的代码应该按原样工作,但您可以使用 parent('tr') 而不是使用多个 .parent()。http://api.jquery.com/parents/

$(function() {
  $("a#click").click(function(){
    var i= $(this).parents('tr').data('uid');
  });​
});

演示:http: //jsfiddle.net/mchambaud/G5jM8/1/

于 2012-09-28T16:24:59.037 回答
0

你试过.attr()吗?

$("a#click").click(function(){
    var i= $(this).parent('td').parent('tr').attr('data-uid');
    console.log( i );
});
于 2012-09-28T16:24:59.540 回答
0

用这个:

var i= $(this).parent('td').parent('tr').attr('data-uid');
于 2012-09-28T16:26:51.770 回答
0

.closest()- 获取匹配选择器的第一个元素
.parent()- 获取当前匹配元素集中每个元素的父元素
.parents()- 获取当前匹配元素集中每个元素的祖先 - 获取匹配元素集中
.children()每个元素的子元素
.siblings()- 获取匹配元素集中每个元素的兄弟
.find()- 获取当前匹配元素集中每个元素的后代 - 获取匹配元素集中每个元素
.next()的紧随其后的兄弟 - 获取每个元素的
.prev()前一个兄弟匹配元素集中的元素

这将帮助你

于 2022-02-04T17:17:41.487 回答