Получить индекс узла td - PullRequest
       2

Получить индекс узла td

0 голосов
/ 11 февраля 2012

Если у меня есть тело, подобное следующему ... Я знаю, что если я нажму на первое радио, оно вернется 1. Если я нажму на внешнее поле таблицы, оно вернется 2. Но когда я нажимаю сначала на вложенную таблицуtd возвращает свой индекс плюс td-индекс родителя в двух оповещениях.Как я могу вернуть только вложенный индекс td, который должен быть 2?Это просто пример структуры таблицы, которая динамически создается, поэтому она должна работать практически с любым дизайном таблицы и любым тд.

Есть предложения?
Этот код я использую для возврата индекса, когда пользователь нажимает на тд (я фиксирую другие индексы для ввода, текстовой области и т. Д.):

        $("td").click(function (event) {
            var nodeIndex = $("td").index();
            var nodeName = $(this).get(0).nodeName
            alert(nodeName + "," + nodeIndex);
        });

Это тело образца:

<body>  
    <input type="radio" />
        <table class="parent_table">
            <tr>
                <td>
                    <table class="nested_table">
                        <tr>
                            <td>
                                Sample Text</td>
                            <td>
                                &nbsp;</td>
                        </tr>
                    </table>
                </td>
                <td>
                    &nbsp;</td>
            </tr>
        </table>
       <input type="radio" />
    </body>

Ответы [ 3 ]

0 голосов
/ 11 февраля 2012

Таблицы уже имеют удобные свойства cellIndex для td и rowIndex для tr.Это означает, что вам не нужно использовать jQuery.

Вместо этого попробуйте что-то вроде этого (в любом случае, это более эффективно):

// set ID "parent_table" on the parent table, then...
document.getElementById('parent_table').onclick = function(e) {
    e = e || window.event;
    var t = e.srcElement || e.target;
    while( t != this && (!t.tagName || t.tagName != "TD")) t = t.parentNode;
    if( t.tagName == "TD") {
        alert("You clicked on cell number "+t.cellIndex+" in row number "+t.parentNode.rowIndex);
    }
}

Помимо повышения эффективности, это позволяет избежать путаницывы ставите JQuery через.Когда вы нажимаете на вложенный TD в своем коде, вы фактически нажимаете на TD родительской таблицы, а также на вложенный, так что вы получаете два оповещения.Здесь вы получите только один.

0 голосов
/ 12 февраля 2012

решаемая. Я просто поместил тд в глобальный клик, а затем смог записать имя узла и индекс в одном событии, которое исключило двойное оповещение ....

jQuery('td').live('click', function (event) {

    if (event.target.nodeName.toLowerCase() == "td") {
        var nodeIndex = $("td").index(this);
        var nodeName = $(this).get(0).nodeName
        alert(nodeName + "," + nodeIndex); 
    }

});
0 голосов
/ 11 февраля 2012

Это виновник, который вызывает все <td> s

var nodeIndex = $("td").index();

Заменить на:

var nodeIndex = $(this).index();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...