【问题标题】:How to convert javascript data attributes as array如何将javascript数据属性转换为数组
【发布时间】:2017-05-14 08:55:55
【问题描述】:

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

                    }

                }

谢谢!

【问题讨论】:

    标签: custom-data-attribute slick.js


    【解决方案1】:

    您必须使用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);
     
    &lt;div id ="c" class="carousel container-fluid no-margin" data-params="{dots: true, arrows: true, autoplay: true, autoplaySpeed: 4000}"&gt;

    【讨论】:

    • 您好阿卜杜拉:谢谢您的回答。我不能使用 JSON:该库使用数组作为选项。请参阅此处的文档:kenwheeler.github.io/slick您有什么建议吗?
    • 变量 'p' 是一个对象,您可以将对象传递给光滑的初始化。我通过传递一个对象来初始化 slick 做了很多次。
    • 谢谢你,阿卜杜拉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 2017-08-21
    相关资源
    最近更新 更多