2012-03-03 92 views
14

我努力的目标包含某个词&不是那种你想办法的属性名。jQuery的属性名称包含

可以说我有:

<div data-foo-bar="hello"></div> 

我怎样可以针对其在属性名'data-foo'元素?

+0

您可以使用自定义jQuery选择:http://stackoverflow.com/a/26657510/1414562 – 2015-10-05 07:41:27

回答

12

我不认为你可以针对属性名称,你目标属性值的方法相同。你可以,但是,使用.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/

+0

“属性选择器”的参考http://api.jquery.com/category/selectors/ – charlietfl 2012-03-03 05:44:47

+3

我很熟悉jQuery。这些选择符匹配给定属性的*值*,而不是属性名称。 – Blender 2012-03-03 05:45:56

+0

这一个看起来更好。如果你想稍后缓存被过滤的对象,你可以这样做:http://jsfiddle.net/Tyj49/4/虽然我会猜测重新想象这种方法可能会长期更好(很难说如果不知道用例),这肯定会得到一票。 – 2012-03-03 05:46:10

-5

尝试这样的事情

var element = $('div[data-foo-bar=hello]')​; 
+0

不知道为什么,这得到了与votedowns跺着脚,好像最简单有效的概念至今的http://的jsfiddle .net/wHuV2/ – charlietfl 2012-03-03 05:41:14

+0

OP正试图匹配属性* name *,而不是实际值。这个问题有些模棱两可。 – Blender 2012-03-03 05:42:01

+0

了解价值,但属性是比4行过滤器简单得多 – charlietfl 2012-03-03 05:43:19

4

我不知道你能做到这一点。我查看了API,你似乎只能对值进行更深层次的部分匹配,而不是属性名称本身。

,我去给你的潜在的令人沮丧的意见,“不这样做”。 ;-)实质上,你所追求的是一群与更一般类别匹配的div。不只是data-foo-bar s,而是全部data-foo s!为什么不只是给所有的数据提供一个你可以选择的类名,或者像data-foo="true"这样的单独属性呢?

换句话说,我并不会严格按照问题的方式来坚持,而是希望知道用例是什么,这样思维上的横向移动可以同样有效地解决您的问题。许多方法来剥皮猫等等。

+0

那么,我的选择将有2个数据属性。但我想,如果有一种方法,那么会想到stackoverflow。 :) – daryl 2012-03-03 05:40:38

+0

你可以写这个$('[data-foo-bar]')将工作 – charlietfl 2012-03-03 05:46:08

+0

不够公平,Brogrammer。 ;-) – 2012-03-03 05:48:25

0

试试这个

$().ready(function() { 
    var test=$('#div_test').data("foo-bar"); 
    alert(test); 
}); 

HTML:

<div data-foo-bar="hello" id="div_test"></div> 
+0

由golly似乎工作。可能值得投入一些反例的测试,看看它是否脆弱,但在这里它是在行动:http://jsfiddle.net/YkTJy/ – 2012-03-03 05:33:51

+0

谢谢@GregPettit – pkachhia 2012-03-03 05:35:51

+0

疯狂。我几乎低估了,直到我看到您的评论@GregPettit。这将教会我跳到结论。 – daryl 2012-03-03 05:39:22

1

这仅仅是一个替代的解决方案。 如果可以确保你正在寻找的属性的名字没有出现在元素文本,你可以做的是让元素的outerHtml值,然后做一个字符串搜索:

$("elementsToCheck").each(function() { 
    var elemHtml = $('<div>').append($(this).clone()).html(); //clone to get the outerHTML 
    if (elemHtml.indexOf("attributeName") >= 0) { 
     // current element contains the attribute with name "attributeName" 
    } 
}); 

希望这有助于。

0

使用.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; 
}); 
相关问题