【问题标题】:Select JQuery elements that have some value set by data() [duplicate]选择具有由 data() 设置的某些值的 JQuery 元素 [重复]
【发布时间】:2012-07-01 23:57:02
【问题描述】:

可能重复:
jquery data selector

我有几个带有“connection_name”类的元素。这些元素中的每一个都有一个使用 data() JQuery 函数绑定到它的唯一 id。我正在尝试查询以查找具有给定 id 的元素,但我似乎无法让它工作。

为了这个测试,我创建了一个只有 1 个元素的页面,并设置了元素的 id。

我可以验证 id 是否正在设置,因为当我在控制台中查询元素时,它会显示返回的 id:

$('.connection_name').data()
  Object
  id: "4fea76bd99ea080d19000002"
  __proto__: Object

我在其他问题/帖子中读到该元素应由 $('selector[data-attribute=value]') 选择,但这似乎不起作用:

$('.connection_name[data-id="4fea76bd99ea080d19000002"]')
[]

更糟糕的是,即使我尝试在没有任何值的情况下(仅通过属性)选择它,我仍然什么都不返回:

$('.connection_name[data-id]')
[]

我不确定问题出在哪里,也不知道该怎么做。

【问题讨论】:

  • 那个链接有一个完美的答案(如果@jfriend00的答案不够好)
  • @Thomas,实际上您提供的链接根本没有帮助。在那个答案上,他们建议 $('selector[data-attribute=value]') 会起作用,但它不起作用,因此我提出了问题。
  • 答案有一大堆代码来让它工作。阅读接受的答案。
  • 不,真的没有。这根本不是一个充分的答案。 Jfriend 提供了一个更清晰、更好的答案。

标签: javascript jquery


【解决方案1】:

这是一种方法:

var theItem = $('.connection_name').filter(function() {
    return($(this).data("id") === "4fea76bd99ea080d19000002");
});

【讨论】:

  • 这很好用,谢谢 jfriend。你知道为什么 $('selector[data-attribute=value]') 模式不起作用吗?一些消息来源似乎声称确实如此。再次感谢。
  • 它们是两个不同的东西。如果您在元素上设置 data-* 属性,jQuery 会在文档准备好时读取它们一次,并将它们同步到其内部数据存储。如果您稍后使用.data() 更新这些值,则属性不会更改。同理,如果使用.attr()更新data-*属性,jQuery内部数据存储不会改变。因此,您必须迭代每个符合您条件的元素,并读取其数据。
  • @RyanOgle - 当你做一个属性选择器时,它只从实际的 DOM 对象中读取属性,因此 '.connection_name[id="4fea76bd99ea080d19000002"]' 仅在对象上有一个具有该值的 data-id 属性时才有效。仅当属性存在于 HTML 中或使用.attr() 设置时,才会出现这种情况。如果 id 值设置为.data("id", "4fea76bd99ea080d19000002"),则该值不会设置为对象的属性(它设置在 jQuery 内部的内部数据结构中),因此不会被选择器操作找到。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-11
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多