Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 25.10.2013
Сообщений: 10

Как много document.getElementById сократить в один ?

21.01.2020, 14:53. Показов 2142. Ответов 12
Метки js (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех неравнодушных
Уже перекурил все темы про document.getElementById , но никак не пойму на своём примере. Точнее даже понимаю как оно будет работать, но не знаю как это описать в моём случае.

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
<onclick type="button" id="hear"></onclick> 
        <script>
        document.getElementById('hear').onclick = function(){
        Green.OnAPILoaded.add(function(){
        Green.OnPageLoaded.add(function(page){
        var Pid= 421;
        Green.Cart.add(Pid); 
        });
        });
        }
        </script>
И таких событий onclick у меня много, нужно сократить все эти однотипные функции в одну.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.01.2020, 14:53
Ответы с готовыми решениями:

TypeError: document.getElementById(.) is null;
Мозила пишет в консоли, что проблема в самой первой строчке, но вот я упорно не могу понять в чем проблема. Пожалуйста, подскажите! ...

document.getElementById срабатывает только один раз
&lt;script type=&quot;text/javascript&quot;&gt; function addItem(Name,Type,Price) { $.post ( &quot;market.php&quot;, {name: Name, type:...

document.getElementById()
Здраствуйте, что-то у меня не выходит заменить &lt;div id=&quot;block_1&quot;&gt;&lt;/div&gt;, проблема в том что id блока у меня динамический ...

12
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
21.01.2020, 15:46
Здравствуйте.
mitia73rus, первое правило - практически никогда не использовать id. id мало где обязано использоваться, например, используется в <label>
Привыкайте к другим способам поиска элемента, например к классу html-элемента.

Покажите html-разметку с несколькими элементами, куда надо навешивать обработчики.
Что такое Green.OnAPILoaded и почему на него надо навешивать обработчик строго при нажатии кнопки?

Распишите понятные примеры.
1
0 / 0 / 1
Регистрация: 25.10.2013
Сообщений: 10
21.01.2020, 16:14  [ТС]
amr-now, Спасибо за ответ, Green.OnAPILoaded это функция через API.
Обработчик срабатывает на клик определенной области картинки. На каждой области свой id и Pid(id предмета)
По сути мне нужно каждый раз передавать параметр этих 2 переменных в функцию, как я понимаю

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!DOCTYPE html>
<html>
 <html lang="en">
<head>
<meta charset="utf-8">
</head>
<body>
<img id="Map2" src=str border="0" width="478" height="164" orgWidth="478" orgHeight="164" usemap="#Mapp"/>
<map name="Mapp" id="Map2"> 
<area shape="rect" coords="476,162,478,164" alt="Image Map" style="outline:none;" />
<area id="hear"  alt="hear" shape="poly" coords="168,67,165,85,164,103,170,124,182,128,208,126,281,126,290,118,292,104,294,90,292,80,291,68,291,64" style="outline:none;" 
    <onclick type="button" id="hear"></onclick> 
<script>
        document.getElementById('hear').onclick = function(){
        Green.OnAPILoaded.add(function(){
        Green.OnPageLoaded.add(function(page){
        var Pid= 421;
        Green.Cart.add(Pid); 
        });
        });
        }
        </script>
</map>
</body>
</html>
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
21.01.2020, 16:43
Цитата Сообщение от amr-now Посмотреть сообщение
первое правило - практически никогда не использовать id
Почему? Поиск элементов по ID осуществляется практически мгновенно в отличие от поиска по селекторам или классам, поскольку такие элементы попадают в глобальный объект window и не только. Их положение в DOM-структуре можно однозначно определить. Особенно может быть заметно при очень большой структуре DOM.
3
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
21.01.2020, 18:25
mitia73rus, разметка сильно поломана.
Клик должен быть на <area> ? Что за элемент <onclick> ?
Где id и pid на каждом <area> ?

Добавлено через 2 минуты
Цитата Сообщение от mitia73rus Посмотреть сообщение
как я понимаю
У меня пока ощущение, что Вы ещё не разобрались в смысле API Green.
Есть общедоступный сайт этого API ?

Добавлено через 8 минут
-----
Мы здесь можем упростить условие, исключив API?
Например, будет несколько <area>. К каждой area привязана пара id и pid.
При клике на любой <area> вывести в console.log() его привязанные числа id и pid.

Такое условие задачи будет нормальное?
1
0 / 0 / 1
Регистрация: 25.10.2013
Сообщений: 10
21.01.2020, 18:46  [ТС]
amr-now,

Цитата Сообщение от amr-now Посмотреть сообщение
Мы здесь можем упростить условие, исключив API?
да, без проблем
Цитата Сообщение от amr-now Посмотреть сообщение
Такое условие задачи будет нормальное?
Да, будет отлично!
0
81 / 40 / 22
Регистрация: 03.05.2013
Сообщений: 722
21.01.2020, 18:53
"практически никогда не использовать id" - вроде как это самый быстрый способ получения доступа.
https://stackoverflow.com/ques... ass-and-id
2
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
21.01.2020, 20:59
Лучший ответ Сообщение было отмечено mitia73rus как решение

Решение

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    <img class="map" src="" border="1" width="720" height="1605" alt="" usemap="#map" />
    <map name="map">
        <area shape="poly" coords="92, 1256, 93, 1297, 157, 1296, 156, 1256" data-id="1" data-pid="100" />
        <area shape="poly" coords="91, 1217, 92, 1257, 156, 1255, 155, 1216" data-id="2" data-pid="200" />
        <area shape="poly" coords="90, 1178, 92, 1218, 155, 1216, 156, 1177" data-id="3" data-pid="300" />
        <area shape="poly" coords="88, 1138, 90, 1178, 156, 1177, 154, 1136" data-id="4" data-pid="400" />
        <area shape="poly" coords="88, 1097, 89, 1137, 154, 1137, 152, 1095" data-id="5" data-pid="500" />
        <area shape="poly" coords="87, 1057, 88, 1097, 152, 1095, 152, 1056" data-id="6" data-pid="600" />
        <area shape="poly" coords="86, 1017, 87, 1056, 152, 1055, 151, 1014" data-id="7" data-pid="700" />
        <area shape="poly" coords="85, 975, 86, 1016, 151, 1015, 149, 974" data-id="8" data-pid="800" />
        <area shape="poly" coords="84, 934, 85, 974, 149, 974, 147, 934" data-id="9" data-pid="900" />
    </map>
    <script>
        for (let area of document.querySelectorAll("map area")) {
            area.onclick = area_click;
        }
 
        function area_click() {
            console.log(this.dataset.id, this.dataset.pid);
        }
    </script>
</body>
</html>
mitia73rus, во время съёмок этого фильма ни одного id не пострадало.

Добавлено через 4 минуты
Прикольно, что в MS Edge бордюр появился, а в Опере нет ))
В MS Edge работает.

Добавлено через 8 минут
-----------
Добился, чтобы картинка без картинки в Опере тоже заработала - стилем.
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <style>
        img {
            display: block;
        }
    </style>
</head>
<body>
    <img class="map" src="" border="1" width="720" height="1605" alt="" usemap="#map" orgWidth="720" orgHeight="1605" />
    <map name="map">
        <area shape="poly" coords="92, 1256, 93, 1297, 157, 1296, 156, 1256" data-id="1" data-pid="100" />
        <area shape="poly" coords="91, 1217, 92, 1257, 156, 1255, 155, 1216" data-id="2" data-pid="200" />
        <area shape="poly" coords="90, 1178, 92, 1218, 155, 1216, 156, 1177" data-id="3" data-pid="300" />
        <area shape="poly" coords="88, 1138, 90, 1178, 156, 1177, 154, 1136" data-id="4" data-pid="400" />
        <area shape="poly" coords="88, 1097, 89, 1137, 154, 1137, 152, 1095" data-id="5" data-pid="500" />
        <area shape="poly" coords="87, 1057, 88, 1097, 152, 1095, 152, 1056" data-id="6" data-pid="600" />
        <area shape="poly" coords="86, 1017, 87, 1056, 152, 1055, 151, 1014" data-id="7" data-pid="700" />
        <area shape="poly" coords="85, 975, 86, 1016, 151, 1015, 149, 974" data-id="8" data-pid="800" />
        <area shape="poly" coords="84, 934, 85, 974, 149, 974, 147, 934" data-id="9" data-pid="900" />
    </map>
    <script>
        for (let area of document.querySelectorAll("map area")) {
            area.onclick = area_click;
        }
 
        function area_click() {
            console.log(this.dataset.id, this.dataset.pid);
        }
    </script>
</body>
</html>
3
0 / 0 / 1
Регистрация: 25.10.2013
Сообщений: 10
23.01.2020, 13:15  [ТС]
amr-now, спасибо за помощь.
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
07.05.2020, 13:10
Цитата Сообщение от amr-now Посмотреть сообщение
во время съёмок этого фильма ни одного id не пострадало.
неправда ваша, пострадали все девять id, ибо не должны их значения начинаться с цифр (соответственно, не должны содержать только цифры)
см https://www.w3.org/TR/html4/types.html#type-name
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
08.05.2020, 01:44
amr-now, увы мне, я в вашем коде увидел id="1" и id="9", не заметив впереди идущие data-
плиз, извините
и будьте здоровы!
1
409 / 162 / 32
Регистрация: 26.11.2019
Сообщений: 434
08.05.2020, 05:31
Добавлено через 1 минуту
Цитата Сообщение от amr-now Посмотреть сообщение
практически никогда не использовать id
это для css хорошо

Цитата Сообщение от amr-now Посмотреть сообщение
например к классу html-элемента
у такого подхода есть слабое место, если элементы с таким же классом будут добавляться (или удаляться) динамически, то поедет вся логика
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
08.05.2020, 13:53
Цитата Сообщение от Peskova_Sveta Посмотреть сообщение
у такого подхода есть слабое место
проблему идентификации нужного html-элемента, имхо, лучше всего решает метод querySelector (), если в селектор "забить" в квадратных скобках пару-тройку атрибутов элемента с их значениями (включая кириллические)
пример: кнопку с надписью "Нажмите!" однозначно вернёт конструкция document.querySelector ('input[type="button"][value="Нажмите!"]')
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.05.2020, 13:53
Помогаю со студенческими работами здесь

Определение браузера (document.getElementById && !document.all ? 1 : 0;)
Добрый день! На форуме (https://www.cyberforum.ru/javascript/thread366501.html) наткнулся на такую конструкцию: var ns6 =...

CreateRange[n] == document.getElementById('id')
Здравствуйте, кто может знает можно ли сравнивать DOM - элементы из фрагмента, (например var sel = window.getSelection(); rng =...

GetElementById и document.write
Искал подобную тему на форуме и в поисковике. Было очень много про getElementById, но практически ничего про мой вопрос. Информация о...

Javacript.document.getElementById
Привет всем!!!! Ребят помогите плс. есть javacript. echo &quot;&lt;a href='javascript:void();' onclick='del_ph()'&gt; &lt;img...

Document.getElementById не работает
Добрый день! document.getElementById не работает! в таблице несколько строк генерируются &lt;td&gt;&lt;input type=text...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru