2016-06-09 74 views
0

作为示例可以说我有以下HTML设置。获取每个属性及其值

<div class="element" data-xy-ko="value1" data-xy-ko2="value2"> 
    <span data-xy-ko="value3">testing</span> 
    <ul> 
    <li data-xy-ko="value4" data-xy-ko2="valu5">testing</li> 
    <li data-xy-ko="value5">tsjbd</li> 
    </ul> 
</div> 

有多种数据属性。哪些属性的共同点是,他们与data-xy-kodata-xy-ko2或任何其他组合开始,只要他们开始data-xy-ko

问题:我怎样才能得到所有的数据属性匹配data-xy-ko和运行的各环路每个属性找到我可以获取每个属性值,包含它的元素,并为每个找到的其他东西。

编辑我可以在同一元素上找到多个匹配属性。

回答

2

您可以使用jQuery的属性

$('[data-xy-ko]').each(function(i, e) { 
    var attributeValue = e.dataset.xyKo; 
    var elementContainingAttribute = e; 
    // Do other stuff for each one found 
}); 
+0

如果在相同的元素中发现2个或更多的匹配属性,它将只运行循环的一个,而不是其他。所以这种方法不起作用 – guub

+0

具有两个匹配属性的元素看起来像什么? – skalpin

+1

无效的HTML就是它的样子:) – atheaos

0

这不是一个直接的答案,因为我改变从你的前提下,HTML选择,但是这是一个更好的方式来处理你希望完成,IMO。我会做这样的:

<div class="element" data-xy-ko="value1 value2"> 
    <span data-xy-ko="value3">testing</span> 
    <ul> 
    <li data-xy-ko="value4 value5">testing</li> 
    <li data-xy-ko="value5">tsjbd</li> 
    </ul> 
</div> 

然后你就可以说:

var myValues = $(element).attr('data-xy-ko'); 
var valuesArray = myValues.split(" "); 
for(var i = 0; i < valuesArray.length; i++) { 
    switch(valuesArray[i]) { 
     case "value 1": 
      // do stuff 
      break; 
     case "value 2": 
      // do stuff 
      break; 
     case "value 3": 
      // do stuff 
      break; 
     ...etc... 
    } 
}