jQuery属性名称包含
我正在尝试定位包含某个单词的属性名称而不是您想要的那种方式。
让我们说:
如何定位属性名称中包含'data-foo'
元素?
我不认为您可以像定位属性值一样定位属性名称。 但是,您可以使用.filter()
来有效地执行此操作:
$('div').filter(function() { for (var property in $(this).data()) { if (property.indexOf('fooBar') == 0) { return true; } } return false; });
请注意, data-foo-bar
已转换为fooBar
。
演示: http : //jsfiddle.net/Tyj49/3/
我不确定你能做到这一点。 我已经看过了API,你似乎只能对值进行更深层次的匹配,而不是属性名称本身。
我打算给你一个令人沮丧的建议,“不要这样做”。 ;-)从本质上讲,你所追求的是一堆与一般类别相匹配的div。 不只是data-foo-bar
,而是所有data-foo
! 为什么不直接给所有数据 – 一个可以选择的类名,或者像data-foo="true"
这样的单独属性?
换句话说,我并不想严格遵守所提出的问题,而是很想知道用例是什么,以便思考中的横向移动可以有效地解决您的问题。 许多方法皮肤猫和所有这些。
这只是一种替代解决方案。 如果您可以确保元素文本中没有您要查找的属性名称 ,那么您可以做的是获取元素的outerHtml值,然后进行子字符串搜索:
$("elementsToCheck").each(function () { var elemHtml = $('').append($(this).clone()).html(); //clone to get the outerHTML if (elemHtml.indexOf("attributeName") >= 0) { // current element contains the attribute with name "attributeName" } });
希望这可以帮助。
试试这个
$().ready(function() { var test=$('#div_test').data("foo-bar"); alert(test); });
HTML:
使用.data()
获取元素的所有数据属性,然后使用.filter
获取具有data-validation*
属性的元素。
var validated_elements = $("p").filter(function() { var found = false; $.each($(this).data(function(key) { if (key.match(/^data-validation/)) { found = true; return false; } } return found; });
尝试这样的事情
var element = $('div[data-foo-bar=hello]');