jQuery属性名包含

jQuery属性名包含,jquery,jquery-selectors,attributes,Jquery,Jquery Selectors,Attributes,我试图以包含某个单词的属性名称为目标&而不是以您所想的方式 假设我有: <div data-foo-bar="hello"></div> 如何将属性名中包含'data-foo'的元素作为目标元素?尝试类似的方法 var element = $('div[data-foo-bar=hello]')​; 我不确定你能做到。我看了一下API,您似乎只能对值进行更深层次的部分匹配,而不是属性名称本身 我将给你一个可能令人沮丧的建议,“不要这样做。”;-)本质上,你所追求的

我试图以包含某个单词的属性名称为目标&而不是以您所想的方式

假设我有:

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


如何将属性名中包含
'data-foo'
的元素作为目标元素?

尝试类似的方法

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

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

我将给你一个可能令人沮丧的建议,“不要这样做。”;-)本质上,你所追求的是一堆符合更一般类别的div。不仅仅是
data foo bar
s,还有所有
data foo
s!为什么不给所有的数据foo一个可以选择的类名,或者一个单独的属性,比如
datafoo=“true”

换言之,我不想严格按照问题的要求去做,而是想知道用例是什么,这样也许横向思维可以同样有效地解决你的问题。给猫剥皮的方法有很多种。

试试这个

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

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

我不认为您可以像对待属性值那样对待属性名称。但是,您可以使用
.filter()
来高效地执行此操作:

$('div').filter(function() {
  for (var property in $(this).data()) {
    if (property.indexOf('fooBar') == 0) {
      return true;
    }
  }

  return false;
});​
请注意,
data fooBar
已转换为
fooBar


演示:

这只是一个替代解决方案。 如果可以确保元素文本中不存在要查找的属性名称,则可以获取元素的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"
    }
});
$(“elementsToCheck”)。每个(函数(){
var elemHtml=$('').append($(this.clone()).html();//克隆以获取outerHTML
if(elemHtml.indexOf(“attributeName”)>=0){
//当前元素包含名为“attributeName”的属性
}
});
希望这有帮助。

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

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;
});

天哪,这似乎奏效了。也许值得进行一些反例测试,看看它是否脆弱,但这里它正在发挥作用:疯狂。在看到你的评论@GregPettit之前,我几乎投了反对票。这将教会我如何仓促下结论。@Brogrammer:等等,你的问题似乎是想匹配部分
数据foo
,而不是完整的
数据foo条。这不对吗?人力资源部,我认为它毕竟不太管用。它将返回foobar的第一个值,但不能全部返回,也不允许使用foobar获得jQuery对象数组。所以它不能满足OP的需要。是的,部分。我不知道我怎么会忘记这个测试不是局部的。可能是因为早上6点左右。好吧,我的选择是有两个数据属性。但我想如果有遗嘱,就有办法,所以我想到了stackoverflow.:)不知道为什么votedowns会这样做,这似乎是迄今为止最简单有效的概念OP试图匹配属性名,而不是实际值。这个问题有点模棱两可。了解值,但属性远比4行过滤器简单。我不知道“踩踏”。这并不能解决这个问题,所以我投了反对票。事实上,它使问题更加复杂,因为现在它不仅选择数据foo条,而且选择值为“hello”的数据foo条;-)当您删除被否决的答案时,您总是可以恢复您的声誉。我对jQuery很熟悉。这些选择器匹配的是给定属性的值,而不是属性名。这一个似乎更好。如果您想缓存过滤后的对象以备以后使用,可以这样做:虽然我想从长远来看重新想象这种方法可能会更好(很难说不知道用例),但这肯定会得到投票。为什么不在这里检查hasOwnProperty?您可以使用自定义的jQuery选择器: