8

我对 jQuery 及其用法有足够的了解,但是今天我遇到了在使用 jQueryth的元素内获取匹配标签的列索引的麻烦。table我想获取具有文本为Mobileth的元素的索引。在这种情况下,索引应该是 2。我得到了实际的索引,但这不是正确的做法。所以我想知道为什么jQuery没有给我正确的索引使用方法。labelindex()

我还为此编写了JS Fiddler

jQuery

var elem = $('#tbl th');
var rIndex;
alert('Length : ' + elem.length);
var index = elem.filter(
    function(index){
        var labelText = $(this).find('label').text();        
        //alert(index + ' - ' + labelText);
        var result = labelText == 'Mobile';
        if (result)
            rIndex = index;
        return result;
    }).index();
alert("jQuery Index : " + index);
alert("Actual Index : " + rIndex);

HTML

<table id="tbl">
    <tr>
        <td></td>
        <th><label>Application No.</label></th>
        <td></td>
        <th><label>Name</label></th>
        <td></td>
        <th><label>Mobile</label></th>
        <td></td>
        <th><label>Gender</label></th>
    </tr>
</table>
4

8 回答 8

12

如果没有参数传递给 .index() 方法,则返回值是一个整数,指示 jQuery 对象中的第一个元素相对于其兄弟元素的位置。

这将为您提供真正的索引 DEMO

elem.each(function(){
    if( $(this).find('label').text()=='Mobile') {
        alert(elem.index(this));
    }
});
于 2013-05-16T07:45:42.940 回答
6

您可以使用 rowIndex 作为行索引和事件对象来获取 cellIndex。

this.rowIndex //for row index
e.toElement.cellIndex //for column index

小提琴下面

小提琴链接

于 2015-07-30T06:36:00.717 回答
2

对于一些参考:

$('input').blur(function() {
    var total_qty = 0;
    var $td = $(this).closest('td');
    var col = $td.parent().children("td").index($td);
    $('table tbody tr').each(function() {
        var $td = $(this).find('td:eq('+col+')');
        var qty = $td.find('input').val();
        if(qty != '') total_qty += qty;
    });
    console.log(total_qty);
});
于 2018-01-25T08:05:30.913 回答
1
$('#tbl').find('th').each(function($index){
    if($(this).children('label').html() == 'Mobile')
        alert($index);
})
于 2013-05-16T07:34:43.107 回答
0

“如果没有参数传递给 .index() 方法,则返回值是一个整数,指示 jQuery 对象中的第一个元素相对于其兄弟元素的位置。”

来源http://api.jquery.com/index/

下面是一个如何使用 index() 来实现您正在寻找的结果的示例。请注意,我在您想要索引的列中添加了一个 id,只是为了使示例更简单,您可以随意选择任何您想要的。

<table id="tbl">
    <tr>
        <td></td>
        <th><label>Application No.</label></th>
        <td></td>
        <th><label>Name</label></th>
        <td></td>
        <th id="mobile"><label>Mobile</label></th>
        <td></td>
        <th><label>Gender</label></th>
    </tr>
</table>

var elem = $('#tbl th');
var rIndex;
alert('Length : ' + elem.length);
var index = elem.filter(
    function(index){
        var labelText = $(this).find('label').text();        
        //alert(index + ' - ' + labelText);
        var result = labelText == 'Mobile';
        if (result)
            rIndex = index;
        return result;
    }).index();
alert("jQuery Index : " + index);
alert("Actual Index : " + rIndex);


correctIndex = $('th').index($('#mobile'))

alert("Used correctly :" + correctIndex);
于 2013-05-16T07:30:44.637 回答
0

Index 函数根据您提供的列表返回索引。在这种情况下,过滤器的结果。

希望这可以帮助

于 2013-05-16T07:35:32.830 回答
0

一种简单的方法是在 td 上使用 .prevAll() ,然后在其父 tr 上使用:

var row = $td.closest('tr').prevAll().length;
var col = $td.prevAll().length;

( $td being the td elem you are checking)

演示:http: //jsfiddle.net/g5s0ex20/2/

于 2015-04-20T18:37:14.927 回答
0
$('table th').each(function(i){
    if($($(this).find('label')).html() == "Name"{
       console.log("position= " + i); return false;
    }
});
于 2017-07-11T14:47:06.320 回答