Отменить выбор неизвестного выбора

У меня есть таблица, которая логически разделена на две половины. Мне придется выбрать только половину строки, как на картинке.

Теперь, если я выберу другую "половину" строки, мне нужно отменить выбор предыдущей. Как бы я это сделал? Мой код здесь:

<tr class="line1">
    <td width="10" class="td3523" onclick="selectme('3523');">
        <input type="radio" name="selattendance" id="tr3523" onClick="setEditDelete(3523)"/>
    </td>
    <td width="100" class="td3523" onclick="selectme('3523');">2012-11-19</td>
    <td width="125" class="td3523" onclick="selectme('3523');">
        <table width="100%" cellpadding="0" cellspacing="0" style="border: 0;padding: 0;border-collapse: collapse">
            <tr> 
                <td style="width: 50%;padding-right: 10px;border: 0" align="right" valign="middle">22:54</td>
                <td style="width: 20%;border: 0">     <a href="#" onclick="loadPic('attendanceimages/39286a0a6b45cae9f116b11882f36046.jpg','2012-11-19','2012-11-19','add','','In','22:54:04','22:54:04');"><img src="images/punchimg.png"></a>
                </td>
                <td style="width: 20%;border: 0">&nbsp;</td>
            </tr>
        </table>
    </td>
</tr>

Когда я нажимаю на любой td, все tdы с тем же идентификатором выбираются с помощью этого кода:

function selectme(id) {
    $('.td' + id).toggleClass("ui-selected");
}

Я думаю, мне нужно поставить еще одну строку, удалив этот класс из ранее выбранного tds. Как бы я это сделал? Благодарю.

3 ответа

Решение

Отдай свое <td>другой класс говорят tdclss затем используйте его в своей функции, чтобы удалить ui-selected учебный класс.

function selectme(id) {
  $('.tdclss').removeClass("ui-selected");
  $('.td' + id).toggleClass("ui-selected");
}

Один подход:

$('input:radio').change(
    function(){
        // caching the jQuery $(this) object
        var that = $(this);
            that
                // moves up to the closest ancestor table element
                .closest('table')
                // finds the '.selected' elements within that table
                .find('.selected')
                // removes the 'selected' class from those elements.
                .removeClass('selected');
            that
                // moves to the parent td element
                .parent()
                // selects subsequent siblings *until* it finds
                // an element that matches the selector
                .nextUntil($('td:has("input:radio")'))
                // adds back the current td element to the collection
                .andSelf()
                // adds the 'selected' class
                .addClass('selected');
    });​

JS Fiddle demo.

Рекомендации:

  • addClass(),
  • andSelf(),
  • closest(),
  • find(),
  • :has() селектор
  • nextUntil(),
  • parents(),

Использование нескольких полей с одинаковым идентификатором рано или поздно вызывает проблемы. Вы можете использовать атрибуты класса для группировки ячеек, или вы можете (вероятно) использовать <span> сгруппировать их (хотя я должен признать, я никогда не пробовал <span> в пределах <tr>).

Другие вопросы по тегам