通过数据属性获取元素

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 函数搜索祖先而不仅仅是父母)。

去掉那个子句。

【讨论】:

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

WebView怎么获取Html元素的值?

JS获取元素修改元素/css样式/标签属性简单事件数据类型

通过php中的属性值获取HTML元素

通过jquery获取附加元素的属性[重复]

D1.DOM-获取DOM元素、修改属性

Javascript,CSS:通过样式属性获取元素