Правильно ли я понимаю?
1. addEventListener('click', go) - обработчик события вызовет функцию go только когда произойдет триггер события click?
2. Если указать круглые скобки
addEventListener('click', go(i)) или addEventListener('click', go()) - функция go вызовется сразу как только интерпретатор дойдет до нее ?
1. Функция addEventListener вторым параметром получит ссылку на go, которая в вашем случает является функцией
2. Функция addEventListener получит результат выполнения функции go
Для понимания
function a(){ return 22}console.log(typeof a, typeof a())//вернет function number
Попробуйте посмотреть, что получится, если div изменится где то ниже. Что div[i] в вашей функции покажет. Лучше сделать примерно так, как выше написал ArbNet
let div = document.getElementsByTagName('div'); for (let i=0; i< div.length; i++){ div[i].addEventListener('click', function(){go(i)}); } function go(i) { div[i].innerHTML = div[i].innerHTML + div[i].dataset.num }.....................div = 22
Вы напрямую вызвали функцию
go(i)
, она и отработала. Все штатно. addEventListener вторым аргументом ждет функцию обратного вызова с 1 аргументом - эвент. Соответственно прямой вызов должен ее отдать.
Для понимания, того, что ждет addEventListener - вот такой бессмысленный, в данном случае код. Хотя, иногда может возникнуть ситуация, когда нужны какие то данные, которых в элементе нет, но в момент обхода (HTMLCollection в вашем случае или NodeList если querySelectorAll) они есть.
let div = document.getElementsByTagName('div');for (let i=0; i< div.length; i++){ div[i].addEventListener('click', go(i));}function go(i) { return function(){ div[i].innerHTML = div[i].innerHTML + div[i].dataset.num }}console.log(go) #просто посмотреть, что это
Доки это супер нужная и важная вещь, но: есть ф12/консоль. Оттуда можно понять
let divs = document.querySelectorAll('div.sssy');divs.forEach(el=>{ el.addEventListener('click', function(e){ console.log( e.target.dataset.num, this.dataset, e, # какой то pageX и еще куча всего e.target, # el = e.target = this el, this) });});
И уже тогда в гугл
На пхп похожие библиотеки есть, если правильно помню pq php
Не очень элегантный алгоритм, но работает: Ищем селектор, обходим некст элементы и если тег!=тегу селектора собираем их и обертываем дивом.
Парсинг ХТМЛ с пыха на питон перевел. За 20 мин такая задача решается
from bs4 import BeautifulSoupimport itertoolst = '''<h2>заголовок1</h2>тут текст <h3>заголовок2</h3> тут текст <p>еще текст</p> <h3>заголовок3</h3> тут текст<h2>заголовок4</h2>тут текст'''print(t, '\n-----------')soup = BeautifulSoup(t, 'lxml')hh = ('h1','h2','h3','h4')def wrap(elm): for el in elm: els = [i for i in itertools.takewhile( lambda x: x.name not in [el.name], el.next_siblings)] div = soup.new_tag('div') el.wrap(div) for tag in els: div.append(tag)for i in hh: h = soup.find_all(i) wrap(h)print(soup.prettify())
Результат
<html> <body> <div> <h2> заголовок1 </h2> тут текст <div> <h3> заголовок2 </h3> тут текст <p> еще текст </p> </div> <div> <h3> заголовок3 </h3> тут текст </div> </div> <div> <h2> заголовок4 </h2> тут текст </div> </body></html>
console.log(elem.classList.length);
Как это зависит? Или вы сейчас гипотетически. Если simplexml не возьмет (весь файл в память), то попробую что нибудь другое. Но, у вас же фреймворк. Иными словами, сначала обрекаете его пользователей на проблемы с большими xml. А потом, возможно, что то, может и придумаем...
Их не 1, конкретнее плиз
Если правильно понял, то скорее не "не указывать", а чтобы не плодить клонов, каких то вещей в разных классах.
Для начала скажите чем xml разбирать будете?
Интересно вы автолоадер обозвали. Или и там ноу-хау, реально классы "перевозятся" 😁
Если "до основания, а затем ...", то
не самый плохой выбор. Я, к этому тихонько иду на своих проектах, не смотря на 20 лет возни с php и соответственно наличие всего на любой случай. Апи уже много где на питоне. Начиная с лемматизации, анализа текстов (лси там всякие) для подбора тематически близких товаров, статей и т.д.
Тоже спрошу. Ну вот, задача - брать х раз в сутки xlsx у поставщика, менять, что изменилось и собрать qr для не суть каких нужд из параметров полученных из экселя на карточке товара. Сами напишете, или все же
"require": { "php": "^7.2", "twig/twig":"^2.0", "box/spout": "^3.0", "endroid/qr-code":"*", ....