2012-03-03 88 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; 
}); 
相關問題