timo-71

Рейтинг
63
Регистрация
19.09.2018
Dram #:

Правильно ли я понимаю?

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
Dram #:
addEventListener('click', function (){go(i)});

Попробуйте посмотреть, что получится, если 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
Dram #:
Мне интересно почему нерабочий вариант работает так как работает

Вы напрямую вызвали функцию

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)
});
});

И уже тогда в гугл 

aleksandrbol #:
Благодарю! А на php это не реализовать? Придётся учить пайтон

На пхп похожие библиотеки есть, если правильно помню pq php

Не очень элегантный алгоритм, но работает:  Ищем селектор, обходим некст элементы и если тег!=тегу селектора собираем их и обертываем дивом.

Парсинг ХТМЛ с пыха на питон перевел. За 20 мин такая задача решается

from bs4 import BeautifulSoup
import itertools

t = '''
<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>
Dram :
Узнайте количество его классов.
console.log(elem.classList.length);
ArbNet #:
Зависит от данных. В движке разбираю структуры страниц simplexml.

Как это зависит?  Или вы сейчас гипотетически.  Если   simplexml не возьмет (весь файл в память), то попробую что нибудь другое. Но, у вас же фреймворк.  Иными словами, сначала обрекаете его пользователей на проблемы с большими   xml. А потом, возможно, что то, может и придумаем...

ArbNet #:
Встроенными средствами php

Их не 1, конкретнее плиз

ArbNet #:
Чтобы каждый раз не указывать нужные классы, а только этот грузовик

Если правильно понял, то скорее не "не указывать", а чтобы не плодить клонов, каких то вещей в разных классах.  

ArbNet #:
Это ж пустяковое дело, конечно сам напишу, будет лаконично и чётко в одном файле

Для начала скажите чем xml разбирать будете?

ArbNet #:
Поэтому есть класс грузовик который подключает эти классы

Интересно вы автолоадер обозвали. Или и там ноу-хау, реально классы "перевозятся" 😁

BuxarNET :
Идея состоит в том, что бы объединить все существующие проекты на одном движке и создавать новые на нем же

Если "до основания, а затем ...", то  

Sly32 #:
aiohttp - крайне удобная вещь.

не самый плохой выбор. Я, к этому тихонько иду на своих проектах, не смотря на 20 лет возни с php и соответственно наличие всего на любой случай. Апи уже много где на питоне. Начиная с лемматизации, анализа текстов (лси там всякие) для подбора тематически близких товаров, статей и т.д.

ArbNet #:
накидают разных библиотек, сварганят может что-то

Тоже спрошу. Ну вот, задача - брать х раз в сутки xlsx у поставщика, менять, что изменилось и собрать qr для не суть каких нужд из параметров полученных из экселя на карточке товара. Сами напишете, или все же

"require": {
      "php": "^7.2",
      "twig/twig":"^2.0",
      "box/spout": "^3.0",
      "endroid/qr-code":"*",
....


Всего: 541