#jquery #jquery-mobile
#jquery #jquery-mobile
Вопрос:
Я использую jQuery 1.4.5 на своей странице и использую загрузчик перед запросом ajax:
$.mobile.loading('show', {theme:"e", text:"", textonly:false, textVisible: false});
После завершения запроса я скрываю его:
$.mobile.loading('hide');
Это работает, но создает тег в конце страницы, где будет расположен текст.
<div class="ui-loader ui-corner-all ui-body-e ui-loader-default">
<span class="ui-icon-loading"></span>
<h1></h1>
</div>
Несколько инструментов SEO теперь выдают предупреждение из-за этого второго тега h1.
Как я могу удалить тег из загрузчика?
Комментарии:
1. Вы пробовали
remove()
метод jQuery?2. @PirateofMarmara Я не видел вашего комментария перед ответом, вы спросили, когда я был afk. Добро пожаловать.
3. нет, как это работает? вы имеете в виду .loading.remove() ?
4. @Arfeo, никаких проблем. Вы можете ответить после того, как он попробует, и это сработает.
5. @merlin, проверь это .
Ответ №1:
Вы можете удалить необходимый элемент с помощью метода jQuery remove
.
$('.ui-loader').find('h1').remove();
Комментарии:
1. Я спросил, пробовал ли он этот метод. Вам лучше подождать.
2. Эй, это сработало. Спасибо. Это рекомендуемый способ? Поиск чего-либо кажется дорогостоящим. К сожалению, textvisible = false, похоже, не влияет.
3. Что
the textvisible=false does not seem to have an affect
означает? @merlin4. Ну, в моем вопросе команда show loading имеет атрибут «textvisible». Для него установлено значение false. Можно подумать, что это приведет к удалению самого тега h1.
5. Нет, согласно документам, это так не работает demos.jquerymobile.com/1.2.0/docs/api/methods.html . Как я вижу на странице примера, этот компонент не удаляется
ui-loader
после скрытия. Он использует переключениеui-loading
атрибутаhtml
тега. Плохой инструмент. @merlin
Ответ №2:
Из документации jQuery:
Удалите набор сопоставленных элементов из DOM.
Подобно .empty(), метод .remove() удаляет элементы из DOM. Используйте .remove(), когда вы хотите удалить сам элемент, а также все, что внутри него. В дополнение к самим элементам удаляются все связанные события и данные jQuery, связанные с элементами. Чтобы удалить элементы без удаления данных и событий, вместо этого используйте .detach() .
setTimeout(function(){
$("h1").remove();
}, 3000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h1>H1 Heading</h1>
Ответ №3:
Я всегда немного опаздываю на вечеринку, но если вам нужно настроить загрузчик JQM, пожалуйста, имейте в виду, что рядом с параметрами, описанными в вашем вопросе, вы можете указать также html
параметр.
Прежде всего, вам нужно настроить свой пользовательский тег html
без нежелательного h1
тега во время инициализации JQM:
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script>
$(document).on("mobileinit", function () {
/* jQuery Mobile initialization */
var html = "<div class='ui-loader'><span class='ui-icon-loading'></span></div>";
$.mobile.loader.prototype.defaultHtml = html;
// ... other settings as You need
$.mobile.loader.prototype.options.text = "";
$.mobile.loader.prototype.options.textVisible = false;
});
</script>
<script src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.js"></script>
После этого вы можете показать loader
как есть без какого-либо текстового сообщения или — когда вам все равно нужно показать загрузку message
— вы можете настроить его дополнительно, всегда используя html
опцию:
var html = "<div class='ui-loader'><span class='ui-icon-loading'></span><h6>Wait...</h6></div>";
$.mobile.loading("option", "html", html);
$.mobile.loading("show");
Пожалуйста, обратите внимание:
Стандартная textVisible
опция больше не будет работать таким образом, потому что по умолчанию JQM ищет h1
тег, который больше не существует внутри разметки загрузчика. Это должно быть исправлено в исходном коде JQM с помощью чего-то, что обеспечивает более гибкую конфигурацию, без жесткого кодирования h1
тега:
1513 this.element.find( "h1" ).text( message );