Insertbefore js не работает

Swup.js перестают работать скрипты

Есть некий код на jquery все работала прекрасно но как только я подключил swup.js все скрипты перестали работать как это можно исправить ?

1 ответ 1

Спустя два дня я нашел решение этой проблемы. Всё, что нужно, — это добавить скрипт вручную через js.

Приведу пример. Я использовал конструктор карт от «Яндекс.Карты». Чтобы вставить этот блок, нужно вставить скрипт такого вида

Но если перейти на страницу через swup, то скрипт не прогрузится и вот как я решил эту проблему.

Я отследил событие переключения страниц

получил url нашей страницы

и запихнул это в switch case, где

это главная страница сайта, где и были блоки от «Яндекс.Карты», а

любая другая страница сайта.

Отследили, дальше нам нужно сгенерировать блок скрипта и вставить в него необходимые данные

Ну а теперь его остается просто вставить туда, куда вы его вставляли в файле разметки

Тут я использую метод insertBefore(), который вставляет элемент перед другим, но можно использовать и простой appendChild(), а переменная documentSite, это кэшированная переменная document

А теперь совет, чтобы все это работало адекватно: данный код лучше выполнять не только при смене страниц, но и при обычной загрузке страниц, через обычный тег в конце боди, а сам скрипт удалить из файла разметки

Источник

Создание элемента и insertBefore не работает

Хорошо, я ударился головой о стену, и я не знаю, почему это не создает элемент. Может быть, что-то очень маленькое, что я упустил здесь. В принципе, есть этот код Javascript, который выводится в PHP-документе, например, где-то посередине загрузки страницы, СЕЙЧАС, к сожалению, он не может попасть в заголовок. Хотя я не уверен, что это проблема в любом случае, но, возможно, это. хммммм.

Кроме того, я уверен, что другие функции, с которыми я связываюсь в этих функциях, работают нормально. Проблема здесь в том, что в этой функции div никогда не создается вообще, и я не могу понять, почему? Кроме того, Firefox FireBug сообщает мне, что переменная divName undefined, хотя я попытался позаботиться об этом в функции, хотя и не уверен, почему.

В любом случае мне нужно, чтобы созданный элемент div был вставлен непосредственно перед следующим HTML:

Я использую имя здесь вместо id, потому что я не хочу дублировать значения id, поэтому я меняю значение имени и увеличиваю его, поскольку эту функцию можно вызывать более одного раза. Например, если на той же странице есть 3 крикбокса (не спрашивайте, почему. lol), мне нужно пропустить другие имена, которые я уже изменил, на «dp_Reserved_Counted», которые, я считаю, я делаю правильно. В любом случае, если бы я мог разместить это в заголовке и вызвать его только один раз, но это невозможно, поскольку они загружены и не могут сказать, какой из них они есть, поэтому он напрямую жестко закодирован в фактическую вывод на странице того, где крикбокс находится внутри HTML. В принципе, не уверен, что это проблема или нет, но должна быть какая-то работа, если проблема не в моем коде выше. arrg

Читайте также:  Почему не работает аэропорт сухум

Пожалуйста, помогите мне. На самом деле мне нужен второй набор глаз.
Спасибо:)

Источник

JavaScript insertBefore не работает должным образом

В попытке сделать мой ответ более гибким на этот вопрос:

Тем не менее, div только инвертированы иногда, не всегда.

Первоначальное нажатие на кнопку дает это на консоли:

После нескольких кликов:

Я не понимаю, что не так с кодом. Я выбираю первого потомка родительского div и делаю то же самое для последнего потомка. Затем я просто вставляю текущий второй div перед первым. Это конец функции. Они также являются прямыми потомками родительского div, как того требует функция insertBefore .

4 ответа

Как упоминалось в комментариях, firstChild и lastChild могут возвращать текстовые узлы для пробела между элементами. Вы можете использовать firstElementChild и lastElementChild , чтобы игнорировать их.

Для некоторых других обходных путей, которые могут вам понадобиться для старых браузеров, см. element.firstChild возвращает ‘

Вы не учитываете текстовые узлы. В приведенном выше примере HTML есть 5 узлов.

Кажется довольно очевидным, что вам нет дела до текстовых узлов здесь. У вас есть довольно много вариантов.

Одним из вариантов будет отфильтровать все текстовые узлы. (Невозможно использовать метод Array.prototype.filter, потому что childNodes — это не массив, а NodeList)

Это даст вам массив только элементов DOM.

Другой вариант — использовать более современные свойства DOM API: см. Ответы Barmar или GolezTrol. Они были бы намного более производительными, если у вашей аудитории есть поддержка браузеров IE9 +.

Ответ на ваш вопрос дан в документах MDN (https: / /developer.mozilla.org/en-US/docs/Web/API/Node/firstChild) для Node.firstChild. Если вы обратитесь к документации, вы поймете, почему вы получаете #text в качестве первого узла.

Это не случайно. Если я щелкну 2 раза, чтобы добавить Div 2 в конец списка, затем нажмите 3 раза, чтобы получить Div 1 в конце списка. Этот шаблон повторяется.

Причина в том, что между ними есть и следующие узлы. Это пробел между элементами.

Чтобы обойти это, используйте атрибут children . Это выбирает дочерние элементы (вместо узлов ).

Источник

Создание элемента и insertBefore не работает

Хорошо, я бился головой об стену об этом, и я понятия не имею, почему он не создает элемент. Может быть, что-то очень маленькое, что я упустил из виду. По сути, есть этот код Javascript, который находится в выводимом документе PHP, как где-то посередине, когда страница загружается, СЕЙЧАС, к сожалению, он не может войти в заголовок. Хотя я не уверен, что это проблема в любом случае, но, возможно, это. хммммм.

Кроме того, я уверен, что другие функции, на которые я ссылаюсь в этих функциях, работают нормально. Проблема здесь в том, что внутри этой функции div никогда не создается вообще, и я не могу понять, почему? Кроме Firefox, FireBug говорит мне, что переменная divName не определена, хотя я пытался позаботиться об этом в функции, хотя и не уверен, почему.

Читайте также:  Можно починить экран часов

В любом случае, мне нужно, чтобы созданный элемент div был вставлен перед следующим HTML:

Я использую здесь имя вместо идентификатора, потому что я не хочу дублировать значения идентификатора, поэтому я изменяю значение имени и увеличиваю его, поскольку эту функцию можно вызывать более 1 раза. Например, если на одной странице есть 3 рупора (не спрашивайте, почему. смеется), мне нужно пропустить другие имена, которые я уже изменил на «dp_Reserved_Counting», что, я считаю, я делаю правильно. В любом случае, если бы я мог, я бы поместил это в заголовок и вызвал бы его только один раз, но это невозможно, так как они загружены и нет никакого способа сказать, кто они, так что это напрямую жестко закодировано в фактическом вывод на страницу, где находится чат в HTML. По сути, не уверен, что это проблема или нет, но должен быть какой-то обходной путь, если только проблема не в моем коде выше. arrg

Пожалуйста, помогите мне. На самом деле мне нужен второй взгляд на это. Спасибо:)

3 ответа

В методе loadShouts было несколько проблем. Во-первых, сравнение строки «undefined» вместо прямой логической проверки, которая будет соответствовать. Я также удалил кучу ненужной логики. Помимо этого, атрибут id, назначаемый новому shoutHolder, передавался как массив, а не как прямое назначение свойства. Проверьте, работает ли следующее лучше.

Когда вы тестируете divName , измените порядок ваших условий с этого

Проблема состоит в том, что когда скрипт находит div без имени, он пытается вызвать свойство indexOf несуществующего значения и, следовательно, выдает ошибку.

Источник

JavaScript DOM insertBefore не работает должным образом

Это мой первый вопрос здесь, так что простите меня за мои ошибки, если таковые имеются.

Я пытаюсь добавить строки в таблицу через JavaScript. Вновь добавленная строка должна быть добавлена в предпоследнюю позицию, последняя строка содержит кнопку, создающую новую строку. Последняя строка имеет идентификатор «submitrow», но получение этого элемента и передача его в insertBefore почему-то не работает. передача lastChild в качестве 2-го парама в insertBefore также ведет себя странно.

В теле это форма:

Вот функция JavaScript:

Теперь проблема в том, что:

insertBefore терпит неудачу в последней строке. Обратите внимание, что insertBefore был опробован на объекте new_tr как wel, и он работает нормально. Таким образом, единственным возможным недопустимым аргументом может быть submitRow, который успешно окрашен в красный цвет всего на одну строку выше неудачного оператора.

Если для неудачного вызова вместо submitrow используется formtable.lastChild , то он запускается. Но тогда каким-то образом этот lastChild включает и верхний ряд. Это означает, что если я поставлю, скажем, еще 4 строки и введу 1, 2, 3, 4, 5 в тестовые входы, а затем, если вы нажмете кнопку «Add one more», то теперь будет добавлена строка между 4 и 5!

Читайте также:  Опель фронтера не работает полный привод

Я много раз пытался рассуждать об этом, но не мог найти никакой логики ни в одной из этих ситуаций.

В надежде на решение, благодарю вас всех,

Абхай Бхаве, Индия

1 ответ

Я использую этот код, пытаясь добавить новый контент перед другим элементом: var form = document.getElementsByClassName(‘commentresponse’)[0], newcomment = ‘

У меня есть усталое свойство insertBefore , оно выдает ошибку скрипта, которая Uncaught DOMException: не удалось выполнить ‘insertBefore’ на ‘Node’: узел, перед которым должен быть вставлен новый узел, не является дочерним по отношению к этому узлу. Ниже код, который я использовал. parent =.

Название должно быть изменено в «JavaScript DOM insertBefore isn’t used properly».

Это потому, что, даже если вы не вставили свой DOM, браузер автоматически создает элемент

, который обертывает строки таблицы. Итак, случается , что #formtable не является родителем #submitrow , и именно поэтому вы получаете ошибку.

Или, в более общем плане:

(В браузерах, которые его поддерживают, есть даже этот:

Internet Explorer, Chrome, Safari и Opera поддерживают его, Firefox-нет, но его можно легко настроить. В любом случае, я не рекомендую использовать эту штуку.)

И, в качестве общего совета, всегда используйте тег

при записи таблиц:

И, конечно,

и , когда они вам понадобятся.

Похожие вопросы:

У меня есть следующий код: HTML:

В моем коде javascript используется insertAdjacentElement. Он работает довольно хорошо в IE, но в chrome он работает, но не так, как ожидалось. он вставляет новый html в другое место. поэтому я хочу.

Я использую этот код, пытаясь добавить новый контент перед другим элементом: var form = document.getElementsByClassName(‘commentresponse’)[0], newcomment =.

У меня есть усталое свойство insertBefore , оно выдает ошибку скрипта, которая Uncaught DOMException: не удалось выполнить ‘insertBefore’ на ‘Node’: узел, перед которым должен быть вставлен новый.

У меня есть такая структура:

и я хочу переставить элементы с PHP DOM, чтобы превратить его.

У меня есть этот ReactJS класс : import React from ‘react’; export default class Test extends React.Component < constructor(props) < super(props); this.state = < status: 'main', >; >.

В настоящее время я делаю калькулятор с HTML, CSS и Javascript для практики. Я обнаружил, что функция built in eval делает математику из строки. Но это не работает должным образом. Я не знаю, в чем.

Я дал этому вопросу название jQuery удаление DOM элементов не работает должным образом. Но я не уверен, что функция удаления-это настоящая проблема. Честно говоря, я совершенно не знаю, где искать.

Я новичок в js, и у меня возникли проблемы с этим фрагментом кода, я уже пытаюсь исправить его более 5 часов без успеха, может ли кто-нибудь найти то, что мне не хватает? Это мой код.: function.

Источник

Оцените статью