Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Изменение DOM с помощью innerHTML (https://javascript.ru/forum/misc/64792-izmenenie-dom-s-pomoshhyu-innerhtml.html)

moron 05.09.2016 19:40

Если они действительно есть в dom, то как ты обьяснишь, что у $a после innerHTML пропадает родитель?
console.log($a.eq(0).parent().prop("tagName"))

laimas 05.09.2016 19:40

По ссылке, видимо вопрос этого касается или я не понимаю о чем спрашивают.

laimas 05.09.2016 19:41

Цитата:

Сообщение от moron
что у $a после innerHTML пропадает родитель?

Никуда он не пропадет - отладчик откройте и ...

moron 05.09.2016 19:52

Я открыл и получаю undefined (google chrome 52.0.2743.82 (64-bit))
И это правильное поведение. По ссылке, которую ты мне дал
"Добавление innerHTML+= осуществляет перезапись"
и именно потому что перезапись, потому что на самом деле элементы из dom удаляются, но в коллекции на них остается ссылка, поэтому они остаются в памяти. И именно поэтому у него меняется родитель..
Либо ты не понимаешь этого, либо ты не понимаешь, что я хочу.
В любом случае спасибо :с

* Сообщения дублировались, потому что я не заметил, как мы перешли на вторую страницу.

laimas 05.09.2016 19:53

Цитата:

Сообщение от moron
Иначе как ты обьяснишь, что после innerHTML у .a пропадает родитель?

Еще раз - никуда он не пропадает, а содержимое перезаписывается. Вы по ссылке прочли?

Вы получили коллекцию, затем модифицировали DOM и хотите чтобы при этом старые ссылки работали как надо?

$("#root").get(0).innerHTML += "<div class='b'>b-dynamic</div>";
var $b = $("div.b"),
    $a = $(".a")
console.log($a.eq(0).parent().prop("tagName"))


Все на месте?

moron 05.09.2016 19:57

В этом случае да. В моем случае добавление перед получением коллекций сложноосуществимо...
Поэтому я отказался в конкретном случае от innerHTML.
За ссылку спасибо :с За внимание тоже.
Цитата:

модифицировали DOM и хотите чтобы при этом старые ссылки работали как надо
Да. Неочивидность как раз том, что innerHTML ничего не модифицирует, а удаляет все и пишет новое..

Про исчезновение родителя я говорил в таком коде:
$a = $(".a")
$root[0].innerHTML += "1";
console.log($a.eq(0).parent().prop("tagName"))

laimas 05.09.2016 20:13

Цитата:

Сообщение от moron
innerHTML ничего не модифицирует, а удаляет все и пишет новое..

Ну здрастье, то есть перезапись это не модификация? :)
Просто достаточно знать это. Например, можно root делегировать обработчик щелчков по дочерним DIV. Затем добавлять в него новые дочерние DIV, как при этом они будут добавляться не важно, все будут работать и будет доступно. Но то что вы пытаетесь делать уже не получится.

moron 05.09.2016 21:26

С делегирование все дочтаточно очевидно, потому что мы вешаем обработчик на родителя а внутри обработчика проверяем event.target. Нам все равно, есть ли обьекты, когда они были добавлены и т.д

laimas 06.09.2016 01:44

Цитата:

Сообщение от moron
С делегирование все дочтаточно очевидно, потому что мы вешаем обработчик на родителя

Ну так и обратное очевидно - получили ссылку на объект, перезаписали его, ссылка не действительна. Но ничто не запрещает сначала получить ссылку на родителя через дочерний элемент, а только затем третировать DOM.

Vlasenko Fedor 06.09.2016 01:56

insertAdjacentHTML не пробовали :cray:


Часовой пояс GMT +3, время: 06:44.