2014-01-17 66 views
0

目前,我有这样的HTML结构:使用jQuery选择HTML元素用逻辑或选择

... 
<div data-is_array="t" data-simpletype="int"> 
    <input type="text"> 
</div> 
<div data-is_array="t" data-simpletype="char"> 
    <input type="text"> 
</div> 
<div data-is_array="t" data-simpletype="text"> 
    <textarea></textarea> 
</div> 
<div data-is_array="t" data-simpletype="real"> 
    <input type="text"> 
</div> 
... 

这CoffeeScript中使用jQuery:

$('*[data-is_array="t"][data-simpletype="int"] :input').each -> 
    simpleCopy($(this)) 
$('*[data-is_array="t"][data-simpletype="char"] :input').each -> 
    simpleCopy($(this)) 
$('*[data-is_array="t"][data-simpletype="text"] textarea').each -> 
    simpleCopy($(this)) 
$('*[data-is_array="t"][data-simpletype="real"] :input').each -> 
    simpleCopy($(this)) 

在HTML还有其他与其他数据包装在div中的输入。我想要在data-is_array="t"data-simpletypeint,char,textreal的所有输入上调用simpleCopy

我目前的解决方案的工作原理,但不是真的很好。有没有办法让所有这些元素与......有关。就像一个逻辑或选择在一个像这样做:

$('*[data-is_array="t"][data-simpletype="int||char||text||real"] :input||textarea').each -> 
    simpleCopy($(this)) 

我知道有一个regex filter,但我不希望使用这个,因为当我测试此Chrome下,这是真的慢。有没有更好的jQuery方法来做到这一点?

回答

1

我想多选择的混合和查找/过滤器会做

$('[data-is_array="t"]').filter('[data-simpletype="int"], [data-simpletype="char"], [data-simpletype="text"], [data-simpletype="real"]').find(':input').each -> 

演示:Fiddle

+0

@ tbraun89检查小提琴 –

+0

@downvoter我是否错过了任何东西 –

0

你复杂太多。

<div id="foo"> 
    <div data-is_array="t" data-simpletype="int"> 
    <input type="text"> 
    </div> 
    <div data-is_array="t" data-simpletype="char"> 
    <input type="text"> 
    </div> 
    <div data-is_array="t" data-simpletype="text"> 
    <textarea></textarea> 
    </div> 
    <div data-is_array="t" data-simpletype="real"> 
    <input type="text"> 
    </div> 
</div> 

有一个div

$(' #foo input, #foo textarea ').each(function() { 
    your stuff()... 
}); 

你擅长总结这一切。优秀的程序员是懒惰的程序员。

+0

问题是有更多的元素在'data-simpletype'处有'data-is_array =“f”'或其他值,并且这些元素不应该被选中。而且我无法在所有匹配的元素上添加div,因为它们是动态生成的。 – tbraun89