带有jquery的奇数行和偶数行的问题

时间:2011-08-03 20:06:51

标签: javascript jquery

我的情况是我的结构如下:

<table>
<tr class="chk"></tr>
<tr>one<tr>
<tr>two<tr>
<tr>three<tr>
<tr>four<tr>
<tr class="chk"></tr>
</table>

<table>
<tr class="chk"></tr>
<tr>one<tr>
<tr>two<tr>
<tr>three<tr>
<tr>four<tr>
<tr class="chk"></tr>
</table>

现在我要做的是在点击tr chk时做点什么。 我现在正在做的是:

$(".chk:even").click(function(){
    //do something
});


$(".chk:odd").click(function(){
    //do something
});

注意:上述正在运作

我想知道如何在单个函数中确定行是偶数还是奇数:

$(".chk").click(function(){
  if(row is even){
     //do something
   }
  else{
    //do something
  }
});

或者我已经比我正在寻找的新版本更好或更好了?

如果问题不明确,请告诉我。

6 个答案:

答案 0 :(得分:2)

试试这个:

$(".chk").click(function(){   
    var bIsEven = ($(this).index(".chk") % 2 == 0)?true:false;
    if(bIsEven){      
        //do something    
    }   else{     
        //do something   
    }
}); 

工作示例:http://jsfiddle.net/3h23G/6/

答案 1 :(得分:1)

您拥有的版本更“理想”,因为它将在页面设置时运行一次查询并附加点击处理程序。之后,每次单击元素时,它将只执行一个没有任何条件的函数。您寻找的方式将导致查询在每次单击时运行。这是否重要取决于您的申请。

你原来的方式将遍历行两次,为true,但这将在页面加载时完成。你寻找的方式只会在启动时迭代一次,但是在click处理程序中你需要在每次运行时将'this'对象包装在jQuery对象中以确定它是否为“:even”。

分配新对象通常比在合理大小的集合上进行迭代更为昂贵。

答案 2 :(得分:0)

$(".chk").click(function(){ 
    var evens = $(".chk:even");
    if (jQuery.contains( evens, row )){      
            //do something    
        }   else{     
            //do something   
        }
}); 

答案 3 :(得分:0)

var chks = $("tr.chk"); 

for(var i=0;i<chks.length;i++) {
    // even 
    if(i % 2 == 0) {

    }
    else {  // odd

    }


}

答案 4 :(得分:0)

试试这个(demo):

$('table tr').click(function(){
    var row = $(this),
        color = (row.index() % 2) ? 'red' : 'blue';
    row.css('background', color);
});

奇怪的是.is(':even').is(':odd')无效...

答案 5 :(得分:0)

如果没有其他工作,你可以使用.index();获取基于0的索引,然后使用%2。