jQuery属性名称包含

时间:2012-03-03 05:21:43

标签: jquery jquery-selectors attributes

我正在尝试定位包含某个单词的属性名称&不是你想的那种方式。

让我说我有:

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

如何定位属性名称中包含'data-foo'的元素?

6 个答案:

答案 0 :(得分: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/

答案 1 :(得分:4)

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

我会给你一个令人沮丧的建议,“不要这样做”。 ;-)从本质上讲,你所追求的是一堆与一般类别相匹配的div。不只是data-foo-bar s,而是所有data-foo s!为什么不直接给所有数据 - 您可以选择的类名,或者像data-foo="true"这样的单独属性?

换句话说,我并不想严格遵守所提出的问题,而是很想知道用例是什么,以便思考中的横向移动可以有效地解决您的问题。许多方法皮肤猫和所有这些。

答案 2 :(得分: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"
    }
});

希望这有帮助。

答案 3 :(得分:0)

试试这个

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

HTML:

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

答案 4 :(得分:0)

使用GuildMember获取元素的所有数据属性,然后使用.data()获取具有.filter属性的元素。

data-validation*

答案 5 :(得分:-5)

尝试这样的事情

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