【问题标题】:JSON data to customize CSS (JSON data from external JSON file) *updated issue (how to make array from JSON data)自定义 CSS 的 JSON 数据(来自外部 JSON 文件的 JSON 数据)*更新问题(如何从 JSON 数据制作数组)
【发布时间】:2017-07-21 08:49:09
【问题描述】:

我在将 JSON 数据解析为 JavaScript 时遇到了困难。我希望能够仅使用 JSON 来自定义 CSS 功能。例如,我只想构建一个基本按钮。我创建了 CSS 样式并将其链接到 HTML。但是,我不知道这种方法可以确保 Javascript 读取 JSON 数据时,它会提供正确的答案。由于 CSS 涉及数值(等宽度:50%),这让我更难自定义。

我想更改按钮的大小,background-colorpadding 以及按钮中的文本。

谁能帮我解决这个问题。谢谢 我使用此代码将 Json 解析为 html

var info=JSON.parse(request.responseText);

------JSON文件------

  {
      "button": {
        "width" : "100%",
        "backgroundColor": "#4CAF50",
        "border": "none",
        "color": "red",
        "padding": "15px 32px",
        "textAlign": "center",
        "textDecoration": "none",
        "display": "inline-block",
        "fontSize": "16px",
        "margin": "4px 2px",
        "cursor": "pointer"
      }
    }

JS file
window.onload = loadJSON;
function loadJSON()
{
 var request;
   if (window.XMLHttpRequest){
      request=new XMLHttpRequest();
   } else {
      request =new ActiveXObject("Microsoft.XMLHTTP");
      }

     request.onreadystatechange = function()
        {
         if ((request.status ===200) &&
            (request.readyState ===4))
            {

             var info=JSON.parse(request.responseText);

             if(info!= null)
                {
                  Object.keys(info).forEach(function(k) {
                    $('<' + k + ' />', info[k].attr).css(info[k].css).appendTo('#container');
                  });

                }
                else {alert("error")};
            }
        }

这是最新的代码。我想知道是否可以自定义多个按钮?应该是什么代码,因为我无法解决它。

【问题讨论】:

  • 对于解析问题,只是read the docs,剩下的问题......我不知道你想要什么。你能详细说明这个问题吗?
  • 您想从对象中读取 JSON 并让 javascript 相应地更改按钮的样式属性吗?那正确吗?恐怕这个问题真的不是很清楚。您提到了一些现有的 CSS,然后一些 JSON 包含一些类似 CSS 的信息,不清楚它们之间的联系是什么,也不清楚您认为 50% 之类的问题是什么。另外,你有没有试过什么?你知道如何使用 Javascript 来设置元素的样式吗?你知道如何从 JSON/JavaScript 对象中读取属性吗?不清楚你想要什么或坚持什么。
  • 是的,我想从对象中读取 JSON 并让 javascript 相应地更改按钮的样式属性。我知道如何将 JSON 数据解析为 JavaScript。如果仅使用 CSS、HTML 和 JavaScript,我就可以自定义按钮图标。我想尝试一些新的东西,从 JSON 文件中提取数据并允许程序自定义按钮的现有功能。但是,我只能更改按钮内的文本,例如“点击我”,但无法更改按钮的颜色、大小等。
  • 你能展示一下你到目前为止得到的代码吗?请编辑问题以包含它。
  • 更新了!请您看一下,您知道如何自定义多个按钮吗?我应该在 JS 代码中包含什么?

标签: javascript jquery html css json


【解决方案1】:

对象的结构与 jQuery 在构建新元素时期望的 CSS 属性非常匹配。因此,您可以将对象应用到用于创建元素的 jQuery 对象。

要指定元素的类型,您可以使用Object.keys 检索对象的属性,然后循环遍历它们。

如果要设置元素的文本,则需要修改数据结构以分别提供 CSS 属性和 HTML 属性,以便可以通过相关方法应用它们,如下所示:

var obj = {
  button: {
    css: {
      width: "100%",
      backgroundColor: "#4CAF50",
      border: "none",
      color: "red",
      padding: "15px 32px",
      textAlign: "center",
      textDecoration: "none",
      display: "inline-block",
      fontSize: "16px",
      margin: "4px 2px",
      cursor: "pointer"
    },
    attr: {
      text: 'Foo'
    } 
  },
  a: {
    css: {},
    attr: {
      href: 'http://stackoverflow.com',
      text: 'Visit StackOverflow.com'
    }
  }
}

Object.keys(obj).forEach(function(k) {
  $('<' + k + ' />', obj[k].attr).css(obj[k].css).appendTo('#container');  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container"></div>

需要注意的是,对象中属性的顺序并不能保证,因此如果您需要依赖顺序,我建议您将数据结构从对象更改为对象数组。

【讨论】:

  • 感谢您的帮助!它有很大帮助。但是,我将外部JSON文件解析成Javascript,方法会一样吗?
  • 不完全——你只需要删除给 jQuery 对象的第二个参数,并将 obj[k].css 更改为 obj[k]。此外,如果您无法控制返回的 JSON,那么设置您创建的元素的文本将会更加困难
  • 感谢您的帮助。但是,您介意向我解释一下这段代码是什么意思吗?我实际上并没有理解您使用的术语“k”。另外,没有迹象表明您在编码中使用了“按钮”一词。我很好奇尽管没有使用“按钮”语法,但代码会产生“按钮”。 Object.keys(obj).forEach(function(k) { $('', obj[k].attr).css(obj[k].css).appendTo('#container '); });
  • k 变量保存对被迭代对象的当前键的引用。这意味着在第一次迭代中它将保存值button。因此,jQuery 对象被用来创建一个新元素:$('&lt;button /&gt;')。然后,它根据对象中的键 k 将相关属性和 CSS 添加到新元素中。在第二次迭代中也会发生同样的情况,但 k 现在正在引用对象的 a 属性。
  • 我也注意到你已经完全改变了这个问题。我建议您将此问题恢复到以前的状态,并提出一个关于从远程源检索数据的新问题。
【解决方案2】:

这里还有一个解决方案https://jsfiddle.net/sopv9652/3/

var data = {
  "button": {
    "width" : "100%",
    "backgroundColor": "#4CAF50",
    "border": "none",
    "color": "red",
    "padding": "15px 32px",
    "textAlign": "center",
    "textDecoration": "none",
    "display": "inline-block",
    "fontSize": "16px",
    "margin": "4px 2px",
    "cursor": "pointer"
  }
}

var tags = Object.keys(data);

$.each(tags, function(i){
	$('body').append($('<' + tags[i] + '>'));
  $(tags[i]).css(data[tags[i]]);
});
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

【讨论】:

  • 仅供参考,OP 想要构建 JSON 中的元素,而不是修改现有元素。此外,不需要第二个循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多