getmylocation()
вызывается как метод <button>
. Кнопки не имеют свойства rowIndex
, как у строк таблицы. Это означает, что вы должны найти <tr>
, в котором находится ваша кнопка. Вот несколько вариантов:
1. Быстрый и грязный способ
var MyRow = this.parentNode.parentNode;
Это на самом деле не рекомендуется, поскольку предполагается, что «дедушка» <button>
- это <tr>
. Если вы поместите <button>
внутри любого элемента, такого как <span>
в ячейке таблицы, это сломается.
2. Элегантный способ
var MyRow = this.closest('tr');
Метод closest()
был введен сравнительно недавно, и его можно использовать для поиска ближайшего предка элемента, который соответствует переданному селектору CSS (в данном случае, 'tr'
). Однако этот метод не поддерживается в старых браузерах, поэтому вам необходимо знать целевую аудиторию (см .: https://caniuse.com/#search=closest).
3. Промежуточный путь
var MyRow = this;
while (MyRow.tagName !== 'TR') {
MyRow = MyRow.parentNode;
}
По сути, вы реализуете ограниченную версию closest()
: вы начинаете с элемента <button>
, в котором был инициирован щелчок, и циклически переключаетесь между его предками, пока не найдете первый, свойство tagName
которого равно TR
, Будьте осторожны: JavaScript чувствителен к регистру, и, как вы можете видеть, свойство tagName
всегда в заглавных буквах, даже если вы написали HTML-код строчными буквами.