2017-01-31 1 views
2

У меня есть таблица со следующими строками и клетками:Как выбрать последнюю ячейку из таблицы, которая не является пустым, используя JQuery

<table id='table1'> 
    <tr id='row1'> 
    <th>index</th> 
    <th>Product</th> 
    <th>Description</th> 
    </tr> 
    <tr id='row2' name='row'> 
    <td name='index'>1</td> 
    <td name='product'>Apples</td> 
    <td name='description'>fruits</td> 
    </tr> 
    <tr id='row3' name='row'> 
    <td name='index'>2</td> 
    <td name='product'>Bananas</td> 
    <td name='description'>fruits</td> 
    </tr> 
    <tr id='row4' name='row'> 
    <td name='index'>3</td> 
    <td name='product'>Carrots</td> 
    <td name='description'>vegetables</td> 
    </tr> 
    <tr id='row5' name='row'> 
    <td name='index'></td> 
    <td name='product'></td> 
    <td name='description'></td> 
    </tr> 
</table> 

Мне нужно, чтобы выбрать значение для последнего td с индексом Name = ' ', который не является нулевым. Любой может понять, как это можно сделать.

+0

Просто FYI, ваш HTML недействителен. Элемент '' отсутствует. –

+0

Извините. Я только что исправил это. –

+0

@RabiaRanaKhan: Будет ли 'td', что вы хотите всегда быть в последнем' tr'? Другими словами, если индекс в 'row5' не пуст, а в' row4', то должен ли он дать вам значение из 'row4'? –

ответ

5

Используйте следующий селектор:

$('td[name=index]:not(:empty):last') 
+1

Приносим извинения, я пропустил его и просто прочитал «не используя jQuery». Я буду уделять больше внимания в будущем :) –

+0

Вы пропустите название, я думаю, что ZeroBased_IX, я прочитал его как не null, используя jquery –

+2

Просто будьте осторожны с пробелами, если используете этот подход. Символ 'td' с символом новой строки будет соответствовать': not (: empty) '. –

1

Для чисто образовательных целей, здесь не является версия JQuery:

function getLastNonEmptyCell(tableSelector) { 
    //Find parent table by selector 
    var table = document.querySelector(tableSelector) 
    //Return null if we can't find the table 
    if(!table){ 
    return null; 
    } 
    var cells = table.querySelectorAll("td") 
    var lastNonEmptyCell = null; 
    //Iterate each cell in the table 
    //We can just overwrite lastNonEmptyCell since it's a synchronous operation and the return value will be the lowest item in the DOM 
    cells.forEach(function(cell) { 
    //!! is used so it's so if it is not null, undefined, "", 0, false 
    //This could be changed so it's just cell.innerText.trim() !== "" 
    if (!!cell.innerText) { 
     lastNonEmptyCell = cell; 
    } 
    }) 

    return lastNonEmptyCell; 
} 

var cell = getLastNonEmptyCell("#table1") 

Редактировать

Как @squint предположили, что это может быть сделано гораздо более сугубо:

function lastNonEmptyCell(tableSelector) { 
    //Since we want the last cell that has content, we get the last-child where it's not empty. This returns the last row. 
    var row = document.querySelectorAll(tableSelector + " td:not(:empty):last-child") 
    //Just grabbing the last cell using the index 
    return row[row.length - 1] 
} 
+0

Приятно видеть версии, отличные от jQuery, но вы, насколько это возможно, не используете механизм выбора. Почему бы не 'document.querySelectorAll (" # table1 td: not (: empty) ")', а затем просто взять последний результат? –

+0

Это лучший однострочный подход. Хорошая работа @squint –

+0

Это не работает вне коробки, так как это вернет все 'td', которые не пусты. Придется делать ': last-child', который возвратил последнюю строку. –

Смежные вопросы