2010-04-05 81 views
5

我有一个包含3列的表。我需要绑定一个事件,当使用jQuery单击其中一列时触发该事件。元素索引,jQuery或Javascript

但是,我需要知道点击列的索引。

即:第一列(索引0),第二列(索引1),第三列(索引2),依此类推......

我可怎么办呢?

VAR FIRSTROW:

var firstRow = $("tr:first > th", "table[id*=Grid]"); 

请看:

firstrow.click(function(e){ 
//var id = e.target.index; 
var id = $(e).parent().children().index(this);//returns -1 
}) 
+0

什么的'firstrow'喜欢? ''?你需要捕获点击'​​'...一个委托函数与'jQuery是最干净的方法来做到这一点。 – 2010-04-05 17:52:27

+0

第一行,取第一行的所有“”元素 – ozsenegal 2010-04-05 17:57:44

回答

6

你可以做到这一点使用.index()(这是基于0的),像这样:

$("td").click(function() { 
    var i = $(this).parent().children().index(this); 
    alert(i); 
}); 
+0

我不这么认为,导致即时通讯尝试使用函数(e){}进行此操作,即: e.target.index – ozsenegal 2010-04-05 17:39:12

+0

@ozsenegal - 它的工作原理,请尝试: )http://jsfiddle.net/F5ALE/ – 2010-04-05 17:40:12

+0

不,这并不完全。是awalys返回“-1”。 – ozsenegal 2010-04-05 17:43:31

2

这可能是使用原生javascripts更好的主意.rowIndex而不是 jQuerys .index。 jQuery在检测表头(TH)元素时可能会遇到一些麻烦。

+0

你将如何使用'.rowIndex'来获取列的索引? – 2010-04-05 17:45:37

+0

应该是'this.cellIndex'。但是:是的,比使jQuery搜索节点列表更简单,更高效。 – bobince 2010-04-05 17:47:24

+0

是的,在你的点击事件处理程序代码中它是this.rowIndex()/ this.cellIndex() – jAndy 2010-04-05 17:49:47

0

我一直使用.prevAll()

$('table').click(function(e) { 
    var $targ = $(e.target); 
    if ($targ.is('th')) { 
    var position = $targ.prevAll().length; 
    alert(position); 
    } 
}); 

Preview on jsbin