jQuery最近父级的数据属性选择器
jQuery data attribute selector for closest parent
我的代码以以下方式为许多元素(并非所有元素)设置了数据属性。
<div id='dvStorage' data-testing='storage_div'>
并且,对于某些元素(并非所有元素),数据属性是用以下方法设置的。
$("#ElementID").data("testing", "data value");
现在,问题来了。当单击文档上的任何按钮时,我需要找到设置了数据属性(测试)的其父项。如前所述,所有元素都没有数据属性,所以我需要在层次结构中向上移动,直到找到期望的元素。
对于#1方法,$("#buttonID").closest("[data-testing]")
起作用。但不适用于#2方法。
对于#2方法,我需要遍历按钮parents()
,并验证它是否有.data("testing")
。我需要避免这种重复。并且有一个适用于#1和#2的通用方法。
这里,不需要验证数据测试的值,而是获取层次结构中第一个将"测试"设置为其数据属性的父级。
提前谢谢。
JSFIDDLE演示
您只有两个选择:
正如您在第一个选项中提到的,您必须遍历所有元素,因为$("#ElementID").data("testing", "data value");
不会更新属性data-testing
,因为该值存储在DOM内部。
第二种方法是提供添加另一个可以在选择器中使用的类:
$("#ElementID").data("testing", "data value").addClass("has-testing");
因此,您的新选择器将是:
$("#buttonID").closest("[data-testing], .has-testing");
JS Fiddle示例
试试这个(适用于#2):数据选择器
e.g: $('[data-testing] , :data(testing)')
试试这个:
$(this).parents("[data-testing]:first");
其中$(this)将是单击处理程序中当前单击的元素。
您可以尝试以下解决方案:
$("body *[data-testing]:first");
供您参考:http://jsfiddle.net/on24Lzxj/
试试这个:$("#buttonID").closest(["data-testing"])
只需更改为以下内容:
$("#buttonID").closest("[data-testing]");
或将$(this).parents("[data-testing]")
用于您选择的
第二次演示
您可以使用attr()
:而不是设置data-testing
到.data()
$("#div1").attr("data-testing", "div1_Data");
这将向元素添加属性和值。
然后你的正常选择器应该工作:
$("#buttonID").closest("[data-testing]")
根据评论进行编辑:
使用.attr()
设置属性和使用.data()
获取属性可能会有问题(正如Eriks-fiddle示例所示),因为后者只检查一次实际元素属性。
我建议在设置和获取时都使用.attr()
,但由于无法更改实现,在这种情况下,这不是一个选项。
无论如何,我会把我的答案留在这里,因为如果不是这样的话,我仍然会推荐它。
- jQuery最近父级的数据属性选择器
- 如何为HTML属性/选择器创建全局名称空间或变量
- 属性选择器不起作用(语法错误、无法识别的表达式)
- 为什么属性选择器不适用于jQuery
- JQuery中的CSS属性选择器
- Jquery $this属性选择器是否包含单词
- 使用 *= 的 jQuery 属性选择器
- jQuery - Raphael - SVG - 基于自定义数据的选择器
- 如何在jQuery中定义条件属性选择器
- 不区分大小写的 jQuery 属性选择器
- jQuery 查找不适用于属性选择器
- IE中的jQuery属性选择器
- 从属性选择器中提取值
- j查询 ID 属性选择器
- 使用本地存储值作为属性选择器
- 按数据属性选择(JQuery)
- 任务不可能:jQuery属性选择器
- 互斥数据属性选择器
- 从多维数组输出的数据属性选择器
- JQuery数据属性选择器未定义