#javascript #php #jquery #wordpress
#javascript #php #jquery #wordpress
Вопрос:
Я пытаюсь оптимизировать загрузку файлов CSSS, поскольку я загружаю некоторые большие файлы CSS на страницы, где они не используются. Есть ли у меня какой-либо способ поставить их в очередь, только если элемент присутствует с классом на этой странице.
Однако я пробовал следующее, это не работает:
jQuery(document).ready(function($) {
//Script Checkers
var wowJS = $('.wow');
if (wowJS.length > 0) {
$.getScript('/wp-content/themes/gowebsites/gw-addon/js/wow.js', function() {
new WOW().init();
});
var head = document.getElementsByTagName('head')[0];
var cssNode = document.createTextNode("link");
cssNode.href = "/wp-content/themes/gowebsites/gw-addon/css/animations.css";
cssNode.rel = "stylesheet";
//console.log("CSS Node: " cssNode); = [object Text]
head.appendChild(cssNode);
}
});
Я видел функции, которые работают для добавления файлов css в заголовок, однако ни одна из них не позволяет сделать его условным.
РЕДАКТИРОВАТЬ: с тех пор я только что использовал функцию getScripts() jQuery однако мне все еще нужно знать, как добавлять css в заголовок только при необходимости.
РЕДАКТИРОВАТЬ: для дальнейшего использования для всех, это окончательный рабочий код:
jQuery(document).ready(function($) {
//Script Checkers
var wowJS = $('.wow');
if (wowJS.length > 0) {
$.getScript('/wp-content/themes/gowebsites/gw-addon/js/wow.js', function() {
new WOW().init();
});
var head = document.getElementsByTagName('head')[0];
var cssNode = document.createElement("link");
cssNode.href = "/wp-content/themes/gowebsites/gw-addon/css/animations.css";
cssNode.rel = "stylesheet";
head.appendChild(cssNode);
}
});
Комментарии:
1.
appendChild()
принимает новый узел или элемент, а не строку. Также обратите внимание, что если вы включили jQuery на страницу, вы можете упростить это с помощью$.getScript()
2. Я также пытался с помощью just append, но безуспешно
3. Неправильно думать об этом в отношении wp_enqueue. Вы бы условно поставили в очередь на основе любых условий, которые сделали бы этот класс доступным на странице. Не уверен, что это категории, используемый шаблон страницы, связанный с контентом и т. Д
4. Единственным условием было бы то, что был использован короткий код и присутствует элемент с классом, который, я не считаю, лучше всего подходит или подходит для php?
Ответ №1:
Сначала создайте узлы, затем добавьте их, используя appendChild()
метод, например :
var scriptNode = document.createElement("script");
scriptNode.src = "/wp-content/themes/gowebsites/gw-addon/js/wow.js";
var cssNode = document.createElement("link");
cssNode.href = "/wp-content/themes/gowebsites/gw-addon/css/animations.css";
cssNode.rel = "stylesheet";
head.appendChild(scriptNode);
head.appendChild(cssNode);
Комментарии:
1. И если я захочу загрузить скрипт в нижний колонтитул, как можно добавить область нижнего колонтитула непосредственно внутри закрывающего тега body?
2. Вызовите
appendChild()
body
узел вместоhead
3. Как сказал @RoryMcCrossan, вам нужно просто указать элемент
4. Я обновил свой ответ своим текущим кодом, он не создает и не связывает элементы. И я использовал alert() для проверки значения wowJS, оно возвращает «1»
5. createElement действительно исправляет это, не получил уведомления о вашем комментарии, и я просто наткнулся на ответ сам, лол
Ответ №2:
Вы должны использовать insertAdjacentHTML
head.insertAdjacentHTML("afterend",'<script language="javascript" src="/wp-content/themes/gowebsites/gw-addon/js/wow.js"></script>');
head.insertAdjacentHTML("afterend",'<link href="/wp-content/themes/gowebsites/gw-addon/css/animations.css" rel="stylesheet">');