2014-01-17 67 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