внутренне, jquery использует .closest для такого рода вещей.
var listItemId = $(this).closest('tr').attr('data-id');
Более того, если у вас есть вложенные таблицы (которые я никогда не видел, но мы никогда не узнаем), вы также должны выбрать первую 'tr'. (хотя это более полезно при поиске элементов div, чем строк). Однако для унификации кода я никогда не использую родителей, когда мне нужно самое близкое. Таким образом, имена функций подразумевают, что они имеют точное значение (ближайший родительский элемент), тогда как .parents () оставляет больше места для интерпретации и, таким образом, снижает читабельность кода (imo)
производительность, они эквивалентны (отметьте этот jsperf )
наконец, вы также можете рассмотреть чистый подход javasrcipt: parentNode (в милях быстрее, чем все остальное, если вам действительно нужна скорость)
в вашем случае:
var listItemId = $(this.parentNode.parentNode).attr('data-id');
или
var listItemId = this.parentNode.parentNode.attributes['data-id'].value;
NB. Для работы методов чистого javascript требуется действительный html, в отличие от того, который задан в вашем вопросе (закройте входной тег и добавьте табличный).
вот маленькая скрипка