如何将javascript数据属性转换为数组

时间:2017-05-14 00:08:31

标签: custom-data-attribute slick.js

我正在尝试为光滑的轮播开发一个库对象,它传递数据对象中的参数。但是我发现数据对象只能是一个字符串。我找到了类似的帖子,但仅限于字符串到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 
                            );

                    }

                }

谢谢!

1 个答案:

答案 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}">