使用选择器中的逻辑OR选择带有jQuery的HTML元素

时间:2014-01-17 02:30:57

标签: javascript jquery jquery-selectors

目前我有这个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中,包含其他数据。我想要的是在simpleCopydata-is_array="t"data-simpletypeintchar或{{1}的所有输入上致电text }。

我目前的解决方案有效,但不是很好。有没有办法得到所有这些元素......像一个逻辑OR选择器,像这样做:

real

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

2 个答案:

答案 0 :(得分:1)

我认为混合使用多个选择器和查找/过滤器

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

演示:Fiddle

答案 1 :(得分: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 ()...
});

你很好。优秀的程序员是懒惰的程序员。