Динамически созданный <li> ведет себя по-разному в IE и Firefox и других браузерах

Я создал функцию сортировки для сортировки элементов li в ul на основе идентификатора.

function noFilterForElements(){
        /* Check where to append */
        var listofelems = $('#ul-to-sort > li');
        if (listofelems.length>0){
            $('#ul-to-sort').html('');
            $.each(listofelems,function(datakey,dataval){
                /* Write out the elements without parents first */
                console.info(dataval);
                if ($(dataval).data('parent') == 0){
                    $('#ul-to-sort').append(dataval);
                }
            });
            $.each(listofelems,function(datakey,dataval){
                /* Write out the elements without parents first */
                if ($(dataval).data('parent') != 0){
                    $('.parent-title[data-actid = "'+$(dataval).data('parent')+'"]').after(dataval);
                }
            });
        }
    }

Проблема заключается в том, что в FF и Chrome и т. д. Данные автоматически содержат все узлы содержимого / дочерние элементы для элемента li. В IE, с другой стороны, берется только элемент li. Все дочерние элементы элемента li не содержатся в переменной dataval.

Протестировано на IE 8, 9, 10 и Edge (стандарты)

Любые идеи о том, почему это происходит и как я могу решить эту проблему, пожалуйста?

PS: Я пробовал повторять с listofelems.each () - результат тот же; работает в FF и Chrome, но не в IE.

Дополнительный HTML-код, а также пример в соответствии с комментарием

<ul id = "ul-to-sort">
  <li class = "parent-title" data-actid = "world-1" data-parent = "0">Parent</li>
  <li class = "parent-title" data-actid = "world-2" data-parent = "world-1">Child 1 of World 1</li>
  <li class = "parent-title" data-actid = "world-3" data-parent = "world-1">Child 2 of world 1</li>
  <li class = "parent-title" data-actid = "world-4" data-parent = "world-2">Child 1 of world 2</li>
  <li class = "parent-title" data-actid = "world-5" data-parent = "world-2">Child 2 of world 2</li>
  <li class = "parent-title" data-actid = "world-6" data-parent = "world-1">Child 3 of world 1</li>
  <li class = "parent-title" data-actid = "world-7" data-parent = "world-1">Child 4 of world 1</li>
  <li class = "parent-title" data-actid = "world-8" data-parent = "world-4">Child 1 of world 4</li>
</ul>

Протестировано с помощью JsFiddle, и он переупорядочивает дочерние элементы.

Вам не нужны два цикла, человек ... используйте один и используйте предложение else.

muuvmuuv 17.12.2018 21:16

Пожалуйста, включите весь соответствующий код, необходимый для воспроизведения вашей проблемы (в данном случае это будет небольшой образец HTML). См. минимальный воспроизводимый пример.

Heretic Monkey 17.12.2018 21:18

Вы пробовали использовать $(dataval).html()?

Mohsin Mehmood 17.12.2018 21:31

@MohsinMehmood - Спасибо за подсказку. Да, у меня есть - все еще не получаются дочерние элементы (или что-либо, в том числе, если это простой текст) li в IE. С другой стороны, FF и Chrome все еще в порядке.

alpharomeo 17.12.2018 21:42

@alpharomeo А что насчет $(this).html()? $(this) должен относиться к текущему элементу <li>

Mohsin Mehmood 17.12.2018 21:50

@MohsinMehmood - тоже пробовал. Все еще не подбирает дочерние элементы. - Есть идеи, почему FF забирает это? Могу я спросить, что происходит на уровне браузера, когда один браузер работает, а другой игнорирует?

alpharomeo 17.12.2018 22:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
47
1

Ответы 1

Я решил это - опубликовать ответ на случай, если это кому-то поможет

Я решил проблему, НЕ установив элемент ul пустым. То есть $('#ul-to-sort').html('');

После того, как я удалил это и по совету @muuvmuuv & @Moshin, я переписал функцию следующим образом:

function noFilterForElements(){
            /* Check where to append */
            var listofelems = $('#ul-to-sort > li');
            $(listofelems).each(function(elemkey,elemval){
                if ($(elemval).data('parent') == 0){
                    $('#ul-to-sort').append(elemval);
                } else {
                    $('.parent-title[data-actid = "'+$(elemval).data('parent')+'"]').after(elemval);
                }
            });

        }

Ul не строится на себе - поэтому даже при обновлении он создает новые элементы - вот почему я изначально установил element.html('') на пустой. Теоретически, когда я добавляю новый элемент, он должен создавать дубликат, но это не так - и это хорошо. Я подозреваю, что, поскольку детали элемента совпадают (без изменений исходного элемента - просто переупорядочивают его), новый элемент с теми же параметрами не создается. (Это предположение - если кто-нибудь может помочь нам понять, почему это так, пожалуйста, отредактируйте этот ответ).

Спасибо за вашу помощь.

Другие вопросы по теме