在来自 ajax 调用的动态 HTML 上应用 owl 轮播
apply an owl carousel on dynamic HTML from an ajax call
我需要将 owl 轮播和所有 CSS 应用于来自 ajax 调用的动态 HTML 元素。
目前,代码如下所示:
jQuery(function ($) {
$('.entry-content').addClass('entry-content--quiz')
$('.get-questions').on('click', function (e) {
e.preventDefault();
let url = $(this).attr('href');
$.ajax({
url: url,
}).done(function (data) {
$('.entry-content').html(data);
$('#wpvq-page-0').owlCarousel({
items:1,
slideBy: 1,
stagePadding: 0,
nav: true,
dots: false,
});
}).fail(function (err) {
console.log('ajax err back', err);
});
return false;
});
});
这显然不起作用并抛出 "owl carousel is not a function" 因为它在初始加载时不在 DOM 中。我需要以某种方式将轮播应用于来自 data
的 div。
我找到了一些相关答案,但它们不符合我的情况:
他们看起来像是重写了 DOM 但在我正在做的事情的上下文中没有意义。
如何将 owl 轮播放在来自 ajax 调用的 HTML 内的 div 上?
编辑 2018 年 12 月 10 日完整样本:
jQuery(function ($) {
$('#link').on('click', function (e) {
e.preventDefault();
let url = $(this).attr('href');
$.ajax({
url: url,
}).done(function (data) {
$('#content').html(data);
$('#carousel-section').addClass("owl-carousel");
setTimeout(function() {
$('#carousel-section').owlCarousel({
items:1,
slideBy: 1,
stagePadding: 0,
nav: true,
dots: false,
});
},1000)
}).fail(function (err) {
console.log('ajax err back', err);
});
return false;
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/owl.carousel.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.carousel.min.css">
<div id="content"></div>
<a id="link" href="http://silly-stallman-3e4b6f.netlify.com/index.html">Cclick</a>
我无法让 HTML 填充到 DIV 中,我不知道为什么它不起作用,但这是我正在做的事情的例子 - 获取静态 HTML (http://silly-stallman-3e4b6f.netlify.com/index.html) 并将其放入 ajax 调用中,用它填充页面,然后需要以某种方式将 owl 轮播定位到动态 HTML。我该怎么做?
我以前遇到过这个问题。我最终异步解决了 ajax 到 运行 的问题。
你可以尝试这样的事情。希望它能给你一些想法。
jQuery(function ($) {
$('.entry-content').addClass('entry-content--quiz')
$('.get-questions').on('click', function (e) {
e.preventDefault();
let url = $(this).attr('href');
let result = undefined;
$.ajaxSetup({ async: false });
$.ajax({
url: url,
}).done(function (data) {
result = data;
}).fail(function (err) {
console.log('ajax err back', err);
});
$.ajaxSetup({ async: true });
// Check if result is assigned
if (result) {
$('.entry-content').html(result);
$('#wpvq-page-0').addClass("owl-carousel");
$('#wpvq-page-0').owlCarousel({
items:1,
slideBy: 1,
stagePadding: 0,
nav: true,
dots: false,
});
}
return false;
});
});
我试过动态添加 owl-carousel,它似乎工作正常。您能否查看下面的代码并检查这是否对您的用例有帮助。
jQuery(function ($) {
$('#link').on('click', function (e) {
myReq.then( (res) =>{
res = res.map( item => `<div class='item'>${item}</div>`);
$('#content').html('<div id="carousel-section">'+res+'</div>');
$('#carousel-section').addClass("owl-carousel");
$('#carousel-section').owlCarousel({
items:1,
slideBy: 1,
stagePadding: 0,
nav: true,
dots: false,
});
})
.catch( (err) =>{
console.log('ajax err back', err);
})
return false;
});
});
const myArray = [1, 2, 3, 4, 5];
const myReq = new Promise( (resolve, reject) => {
setTimeout( () => {
resolve(myArray)
}, 1000)
})
.item {
width: 300px;
height: 300px;
display: inline-flex;
margin: 10px;
align-items: center;
justify-content: center;
border: 1px solid #009688;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/owl.carousel.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.carousel.min.css">
<div id="content">
</div>
<a id="link" href="#">Cclick</a>
好的,我明白了。是这样的:
我需要改变
jQuery(function ($) {
到
$(function ($) {
发生了某种冲突。
我需要将 owl 轮播和所有 CSS 应用于来自 ajax 调用的动态 HTML 元素。
目前,代码如下所示:
jQuery(function ($) {
$('.entry-content').addClass('entry-content--quiz')
$('.get-questions').on('click', function (e) {
e.preventDefault();
let url = $(this).attr('href');
$.ajax({
url: url,
}).done(function (data) {
$('.entry-content').html(data);
$('#wpvq-page-0').owlCarousel({
items:1,
slideBy: 1,
stagePadding: 0,
nav: true,
dots: false,
});
}).fail(function (err) {
console.log('ajax err back', err);
});
return false;
});
});
这显然不起作用并抛出 "owl carousel is not a function" 因为它在初始加载时不在 DOM 中。我需要以某种方式将轮播应用于来自 data
的 div。
我找到了一些相关答案,但它们不符合我的情况:
他们看起来像是重写了 DOM 但在我正在做的事情的上下文中没有意义。
如何将 owl 轮播放在来自 ajax 调用的 HTML 内的 div 上?
编辑 2018 年 12 月 10 日完整样本:
jQuery(function ($) {
$('#link').on('click', function (e) {
e.preventDefault();
let url = $(this).attr('href');
$.ajax({
url: url,
}).done(function (data) {
$('#content').html(data);
$('#carousel-section').addClass("owl-carousel");
setTimeout(function() {
$('#carousel-section').owlCarousel({
items:1,
slideBy: 1,
stagePadding: 0,
nav: true,
dots: false,
});
},1000)
}).fail(function (err) {
console.log('ajax err back', err);
});
return false;
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/owl.carousel.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.carousel.min.css">
<div id="content"></div>
<a id="link" href="http://silly-stallman-3e4b6f.netlify.com/index.html">Cclick</a>
我无法让 HTML 填充到 DIV 中,我不知道为什么它不起作用,但这是我正在做的事情的例子 - 获取静态 HTML (http://silly-stallman-3e4b6f.netlify.com/index.html) 并将其放入 ajax 调用中,用它填充页面,然后需要以某种方式将 owl 轮播定位到动态 HTML。我该怎么做?
我以前遇到过这个问题。我最终异步解决了 ajax 到 运行 的问题。
你可以尝试这样的事情。希望它能给你一些想法。
jQuery(function ($) {
$('.entry-content').addClass('entry-content--quiz')
$('.get-questions').on('click', function (e) {
e.preventDefault();
let url = $(this).attr('href');
let result = undefined;
$.ajaxSetup({ async: false });
$.ajax({
url: url,
}).done(function (data) {
result = data;
}).fail(function (err) {
console.log('ajax err back', err);
});
$.ajaxSetup({ async: true });
// Check if result is assigned
if (result) {
$('.entry-content').html(result);
$('#wpvq-page-0').addClass("owl-carousel");
$('#wpvq-page-0').owlCarousel({
items:1,
slideBy: 1,
stagePadding: 0,
nav: true,
dots: false,
});
}
return false;
});
});
我试过动态添加 owl-carousel,它似乎工作正常。您能否查看下面的代码并检查这是否对您的用例有帮助。
jQuery(function ($) {
$('#link').on('click', function (e) {
myReq.then( (res) =>{
res = res.map( item => `<div class='item'>${item}</div>`);
$('#content').html('<div id="carousel-section">'+res+'</div>');
$('#carousel-section').addClass("owl-carousel");
$('#carousel-section').owlCarousel({
items:1,
slideBy: 1,
stagePadding: 0,
nav: true,
dots: false,
});
})
.catch( (err) =>{
console.log('ajax err back', err);
})
return false;
});
});
const myArray = [1, 2, 3, 4, 5];
const myReq = new Promise( (resolve, reject) => {
setTimeout( () => {
resolve(myArray)
}, 1000)
})
.item {
width: 300px;
height: 300px;
display: inline-flex;
margin: 10px;
align-items: center;
justify-content: center;
border: 1px solid #009688;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/owl.carousel.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.carousel.min.css">
<div id="content">
</div>
<a id="link" href="#">Cclick</a>
好的,我明白了。是这样的:
我需要改变
jQuery(function ($) {
到
$(function ($) {
发生了某种冲突。