Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.06.2017, 12:06
Аспирант
Отправить личное сообщение для Luca Посмотреть профиль Найти все сообщения от Luca
 
Регистрация: 20.06.2017
Сообщений: 69

Вопрос по getArrtribute()
Здравствуйте

let div = document.createElement('div');
document.body.appendChild(div);
div.onclick = function(){alert('alert')};
alert(div.getAttribute('onclick'));

результат null

почему?
Ответить с цитированием
  #2 (permalink)  
Старый 23.06.2017, 12:23
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

Luca,
потому что тут "односторонняя" связь. Вот если бы ты назначил onclick через setAttribute
div.setAttribute('onclick', "alert('alert')");

то и div.onclick бы появился. Но не наоборот.
Ответить с цитированием
  #3 (permalink)  
Старый 23.06.2017, 16:14
Аспирант
Отправить личное сообщение для Luca Посмотреть профиль Найти все сообщения от Luca
 
Регистрация: 20.06.2017
Сообщений: 69

интересно получается:
div.onclick = function(){alert('alert')};
div.addEventListener('click', function(){alert('alert')});
div.setAttribute('onclick','alert("alert")');

тремя способами, получается, можно задать одну и ту же реакцию на щелчок по div.

зачем всё по несколько раз дублировать? куча свойств просто заранее уже есть и минимум в двух экземплярах (может кто и еще способ подскажет). Пока данная ситуация в голове "не улеглась".
let atrMap  = new Map();
    for (let i in div){
       atrMap.set(i,div[i]);
    }
console.error(atrMap.size);  
 let n = 0;
 for (let i in div){
        if (  atrMap.has(i) && (div[i] === atrMap.get(i) ) )
        console.warn(`${i}=>${div.getAttribute(i)}`);
    }
console.error(n);

227 дубликатов получается что ли? притом они полностью идентичны...
две идентичных хэш-таблицы создаются что ли для каждого Node
одна для доступа через точечную нотацию, а вторая set,get
притом, что onclick из примера выше сработает во всех 3 случаях.
Ответить с цитированием
  #4 (permalink)  
Старый 23.06.2017, 16:21
Аспирант
Отправить личное сообщение для Luca Посмотреть профиль Найти все сообщения от Luca
 
Регистрация: 20.06.2017
Сообщений: 69

ой, извиняюсь...
в 8 строке
if (  atrMap.has(i) && (div.getAttribute(i) === atrMap.get(i) ) ){

и получается 88 совпадений, но тем не менее.
227 свойств в обоих случаях
Ответить с цитированием
  #5 (permalink)  
Старый 23.06.2017, 16:29
Аспирант
Отправить личное сообщение для Luca Посмотреть профиль Найти все сообщения от Luca
 
Регистрация: 20.06.2017
Сообщений: 69

Сообщение от Alexandroppolus Посмотреть сообщение
Luca,
потому что тут "односторонняя" связь. Вот если бы ты назначил onclick через setAttribute
div.setAttribute('onclick', "alert('alert')");

то и div.onclick бы появился. Но не наоборот.
не совсем так получается: в одном случае строка возвращается, в другом функция

Последний раз редактировалось Luca, 23.06.2017 в 16:39.
Ответить с цитированием
  #6 (permalink)  
Старый 23.06.2017, 16:38
Аспирант
Отправить личное сообщение для Luca Посмотреть профиль Найти все сообщения от Luca
 
Регистрация: 20.06.2017
Сообщений: 69

в разных броузерах цифры разные. Если сравнить все свойства между броузерами, то, я так понимаю, localStorage надо, те запилить несколько Map, под каждый броузер и потом сравнить всё?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Меню с выезжающим сайдбаром Jaz Элементы интерфейса 17 26.06.2016 19:21
Неизвестный идентификатор FaNaT_96 Общие вопросы Javascript 14 01.05.2016 18:15
Всплытие событий или что то не так... Кирюха =) jQuery 6 30.03.2013 12:56
вопрос про возможности JS для рисования и анимации macdack Библиотеки/Тулкиты/Фреймворки 3 15.07.2011 00:13
Теоретический вопрос. gods33 (X)HTML/CSS 10 16.12.2010 23:49