Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.06.2020, 13:39
Интересующийся
Отправить личное сообщение для Андрей_Ко Посмотреть профиль Найти все сообщения от Андрей_Ко
 
Регистрация: 02.06.2020
Сообщений: 21

Получить строка/столбец "кликнутой" ячейки Гугл-таблицы
Скрипты только постигаю... работал исключительно в VBA...
Пытаюсь наваять "нечто" в Гугл-Таблице. Вопрос - в заголовке темы.
Стырил на каком-то сайте код:
document.querySelector('Prestige').onclick = (event) => {
  let cell = event.target;
  if (cell.tagName.toLowerCase() != 'td')
    return;
  let i = cell.parentNode.rowIndex;
  let j = cell.cellIndex;
 
  console.log(i, j);
}
};

В таблице вставил его в редактор скриптов... и ничего, хоть обкликайся
А ,если запустить скрипт прямо в редакторе, то он пишет что "документ не определён и указывает на первую строку.
'Prestige' - имя Таблицы
Ответить с цитированием
  #2 (permalink)  
Старый 02.06.2020, 13:42
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

https://learn.javascript.ru/onload-ondomcontentloaded
Ответить с цитированием
  #3 (permalink)  
Старый 02.06.2020, 15:02
Интересующийся
Отправить личное сообщение для Андрей_Ко Посмотреть профиль Найти все сообщения от Андрей_Ко
 
Регистрация: 02.06.2020
Сообщений: 21

Прочёл ссылку... ешё раз прочёл... интуитивно догадываюсь, что чего-то не дописал? Понять бы только - что?
Если файл(Таблица) открыт на экране, то разве он уже не загружен и событие DOMContentLoaded не произошло? Зачем его специально обрабатывать? (Логика работы в VBA меня всё время сбивает. )
Ответить с цитированием
  #4 (permalink)  
Старый 02.06.2020, 15:17
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Андрей_Ко
пишет что "документ не определён и указывает на первую строку
То есть, вы обработчик document.querySelector('Prestige').onclick определяете тогда, когда документ еще не загружен и не готов DOM. Поэтому вы и получаете это сообщение об ошибке, так как нет еще элемента 'Prestige', который вы пытаетесь получить. Обработчик нужно устанавливать когда документ загружен и DOM готов, то есть в обработчике события загрузки документа. По ссылке о нем и рассказывается (DOMContentLoaded) и дается код такого обработчика.

PS. Кстати, querySelector(), это получение ссылки на объект по селектору, которым может быть значения: имя тега, атрибута id, или имя класса. То есть в вашем случае, если Prestige, это id, то

document.querySelector('#Prestige')

если имя класса, то

document.querySelector('.Prestige')

а у вас не понять что. Если ваш скрипт размещен, например, в конце страницы, то DOMContentLoaded и не обязателен, и причиной ошибки может быть как раз проблема с некорректным селектором (при этом об этом в ошибке будет сказано). Не заметил я сразу этот ляп, проверьте, что у вас и исправьте.

Последний раз редактировалось laimas, 02.06.2020 в 16:56.
Ответить с цитированием
  #5 (permalink)  
Старый 02.06.2020, 17:01
Интересующийся
Отправить личное сообщение для Андрей_Ко Посмотреть профиль Найти все сообщения от Андрей_Ко
 
Регистрация: 02.06.2020
Сообщений: 21

Я пока не понимаю - где размещён мой скрипт? Есть Гугл-таблица, у неё есть Редактор скриптов, вот в нём и лежит скрипт. Интуичу, что все эти td,tr и т.п. мне не нужны, ведь сама страница(собственно таблица) уже сформирована?
Пробую переделать код.
Вариант 1:
function myFunc() {
  function ready(){
  document.querySelector('Prestige').onclick = (event) => {
  let cell = event.target;
  if (cell.tagName.toLowerCase() != 'td')
    return;
  let i = cell.parentNode.rowIndex;
  let j = cell.cellIndex;

    console.log(i, j);
}}};

Ошибка при запуске в Редакторе пропала, но и работать не стало.
Вариант 2:
function myFunc() {
  document.addEventListener("DOMContentLoaded", () => {
  document.querySelector('Prestige').onclick = (event) => {
  let cell = event.target;
  if (cell.tagName.toLowerCase() != 'td')
    return;
  let i = cell.parentNode.rowIndex;
  let j = cell.cellIndex;

    console.log(i, j);
}})};

И опять возникает "документ не определён" во второй строке
Prestige - имя таблицы, пробовал и '#Prestige', и '.Prestige' в Варианте 1 - без толку.

Последний раз редактировалось Андрей_Ко, 02.06.2020 в 17:14.
Ответить с цитированием
  #6 (permalink)  
Старый 02.06.2020, 17:13
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Андрей_Ко
Prestige - имя таблицы
Что значит имя?
Ответить с цитированием
  #7 (permalink)  
Старый 02.06.2020, 17:19
Интересующийся
Отправить личное сообщение для Андрей_Ко Посмотреть профиль Найти все сообщения от Андрей_Ко
 
Регистрация: 02.06.2020
Сообщений: 21

Google Таблицы, по умолчанию создаётся Новая таблица, я её и переименовал
ради интереса в строке document.querySelector('Prestige').onclick... менял значение в скобках на любое... а ничего не происходит! В смысле - ошибки не возникает!

Последний раз редактировалось Андрей_Ко, 02.06.2020 в 17:26.
Ответить с цитированием
  #8 (permalink)  
Старый 02.06.2020, 17:21
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

<table id="as"> будет найдена по селектору querySelector("#as") - по идентификатору
<table class="as"> будет найдена по селектору querySelector(".as") - по имени класса
<table> будет найдена по селектору querySelector("table") - по имени тега
А querySelector("as") ничего не найдет.
Ответить с цитированием
  #9 (permalink)  
Старый 02.06.2020, 17:25
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Андрей_Ко
умолчанию создаётся Новая таблица, я её и переименовал
Нет у таблицы атрибута name, в котором можно указать "Новая таблица", хотя пользовательские атрибуты не запрещены. Если Гугл возвращает объект, которому задается "Новая таблица" как, например, ее заголовок, то и бог с ним. Используйте сам объект, которому и назначайте обработчик, querySelector() в этом случае не нужен.
Ответить с цитированием
  #10 (permalink)  
Старый 02.06.2020, 17:30
Интересующийся
Отправить личное сообщение для Андрей_Ко Посмотреть профиль Найти все сообщения от Андрей_Ко
 
Регистрация: 02.06.2020
Сообщений: 21

если нет атрибута Name, то где тогда хранится моё название?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить <thead> таблицы Dencho Общие вопросы Javascript 3 10.12.2015 17:21
Как получить значение ячейки таблицы внутри блока div, в итерации .each() Sanu0074 jQuery 1 21.01.2014 19:32
Узнать номер ряда у ячейки таблицы grego Events/DOM/Window 2 27.08.2013 20:07
OnClick ячейки таблицы и ссылки в этой ячейке MasDen Javascript под браузер 2 30.06.2011 10:34
Как получить содержимое ячейки таблицы Enxiro jQuery 5 29.05.2011 16:36