我正在尝试为光滑的轮播开发一个库对象,它传递数据对象中的参数。但是我发现数据对象只能是一个字符串。我找到了类似的帖子,但仅限于字符串到json Eval或split(“,”)不起作用,顺便说一句......
这是我的代码:
HTML:
<div class="carousel container-fluid no-margin" data-params="{dots: true, arrows: true, autoplay: true, autoplaySpeed: 4000}">
JS:
var loadCarousel = function(element) {
var carousel = $(element).find('.carousel');
var params;
if($(carousel).find('.single-item').length && !$(carousel).find('.single-item').hasClass('slick-initialized')) {
params = $(carousel).data('params'); // need to convert from a string to an array
$(carousel).find('.single-item')
.slick(
params
);
}
}
谢谢!
答案 0 :(得分:0)
您必须使用JSON.parse()将字符串转换为对象,但在您的情况下,您必须对字符串进行一些预处理,因为对于JSON.parse(),字符串应该像'{“hello” :“世界”}'。目前字符串的格式为“{hello:world}”。我在普通JS中编写了一个小脚本,它将字符串转换为JSON.parse()的正确形式。你可以这样做。
var a = document.getElementById("c");
var dataParams = a.getAttribute('data-params');
var newStr = "";
for (var i = 0; i<dataParams.length; i++){
if(dataParams[i]=="{"){
newStr = newStr+'{"';
}
else if(dataParams[i]==":"){
newStr = newStr+'":';
}
else if(dataParams[i]==" "){
newStr = newStr+' "';
}
else if(dataParams[i]==","){
newStr = newStr+'",';
}
else if(dataParams[i]=="}"){
newStr = newStr+'"}';
}
else{
newStr = newStr + dataParams[i];
}
}
var p = JSON.parse(newStr);
console.log(p.dots);
<div id ="c" class="carousel container-fluid no-margin" data-params="{dots: true, arrows: true, autoplay: true, autoplaySpeed: 4000}">