通过数据属性获取元素

Posted

技术标签:

【中文标题】通过数据属性获取元素【英文标题】:get element by data attribute 【发布时间】:2022-01-15 01:35:39 【问题描述】:

我有这个 html 结构:

<table id="table">
   <tr data-id="3">
      <td>08.09.2021</td>
      <td><div class="btnDelete">Delete</div></td>
   </tr>
</table>

还有这个 onclick 功能:

var myID = 3;
$(".btnDelete").click(function() 
    
   console.log(
      $('#table').parents('tr').find("[data-id='" + myID + "']").html()
   )

)

结果将是“未定义”。

var myID = 3;
$(".btnDelete").click(function() 
    
   console.log(
      $('#table').parents('tr').find("[data-id='" + myID + "']").html()
   )

)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="table">
   <tr data-id="3">
      <td>08.09.2021</td>
      <td><div class="btnDelete">Delete</div></td>
   </tr>
</table>

我想获取&lt;tr data-id="3"&gt; 的html 部分并通过数据属性“data-id”搜索该元素。但是我的方法行不通。

我的错误在哪里?

【问题讨论】:

parents() 上升 DOM,而不是下降。只需删除该方法:$('#table').find("[data-id='" + exportID + "']").html() 总是 调试你的选择器 - 似乎 90%(轶事)人们问像 .html() 不起作用 这样的问题,他们只是有错误的选择器。 console.log($("#table").length, $('#table').parents('tr').length, $('#table').parents('tr').find("[data-id='" + myID + "']").length)很快告诉你问题出在哪里(假设你没有嵌套表,但是你不会知道你有一个错误,因为它仍然“工作”) 【参考方案1】:

这是你的错误:

  $('#table').parents('tr').find("[data-id='" + myID + "']").html()

应该是:

  $('#table').find("[data-id='" + myID + "']").html()

【讨论】:

【参考方案2】:

ID 为 table 的元素在您提供的 HTML 中没有任何 tr 元素的祖先(parents 函数搜索祖先而不仅仅是父母)。

去掉那个子句。

【讨论】:

以上是关于通过数据属性获取元素的主要内容,如果未能解决你的问题,请参考以下文章