【问题标题】:Javascript: jQuery : Declare dynamic variables with numeric prefixes from JsonJavascript: jQuery : 用 Json 的数字前缀声明动态变量
【发布时间】:2016-02-01 07:38:30
【问题描述】:

我有一个带有 jquery 的 json 文件

我想这样做:

var $item1 = $('<div class="gallery-item item1">');
var $item2 = $('<div class="gallery-item item2">');
....
var $items = $item1.add($item2).add($item3)....;

我尝试这样做,但我无法创建动态变量

   if(response){
       var items = [];
       $.each( response, function( key, val ) {
        // console.log('id :',key);
        // console.log('val :',val);
          var $item+key= $(val);
       });
       // var $items = $item1.add($item2).add($item3)....;
      }

【问题讨论】:

  • 你到底要什么?? @pablofrR
  • 编辑您的问题,使其对未来的访问者更有帮助;有更好的标题和解释你的意图;这样我们就可以在被认为是投票时投票
  • 我想从 JSON 创建多个 VAR,像这样添加它们 var $ items = $ item1.add ($ item2) .add ($ item3) ....; codepen.io/anon/pen/LpraKY
  • 你想把存储在$item1$item2等的所有对象放到一个数组中??或者您想将使用 selectors 从 JSON 中选择的元素添加到列表中??
  • 哦,我知道了;你想动态声明带有前缀的变量key

标签: jquery arrays json var


【解决方案1】:

$.add() 所做的只是将选定的元素添加到选择中。您的意图可能有所不同,但我从您的帖子中了解到您想要选择根据可用 JSON 创建的所有新 div。

为此,您可以这样做:

var response = {
  "$item1": '<div class="gallery-item item1">',
  "$item2": '<div class="gallery-item item2">',
  "$item3": '<div class="gallery-item item3">'
};
if (response) {
  var $items;
  $.each(response, function(key, val) {
    eval(key + "=$('" + val + "')");
    var e = eval(key);
    $items = ($items== null)?e:$items.add(e);
  
    /* for visual output */
    e.html(key);
    $("body").append(e);
    /* for visual output */
  });
}
.gallery-item {
  width: 100px;
  height: 100px;
  float: left;
  margin-right: 5px;
  padding: 20px;
}
.item1 {
  background: red;
}
.item2 {
  background: green;
}
.item3 {
  background: blue;
}
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

另外请记住,您应该尽可能避免使用 eval()。问问自己你是否真的需要做这些事情?可以通过简单地选择来实现:

var $items = $(".gallery-item");

【讨论】:

  • 我不知道项目的数量。如何做到这一点: var $items = $item1.add($item2).add($item3);这不起作用: var $items; $.each(response, function(key, val) { eval(key + "=$('" + val + "')"); var $items = key.add(key); });
  • @pablofr 似乎您正在从局部变量范围之外访问 $item1 。如果你想要它在外面,那么将变量声明为全局变量。
  • 我同意,但是如何?在解析处理之前,我不知道我的 json 响应中这个项目的数量。
  • @pablofr 我对上述答案做了一些改动。它现在应该接受多个 div。我正在使用手机,所以回答有些困难。
  • 我的目标是加载一个 jQuery 对象。是一个完整的例子:37.187.62.99 click "Load from js" => ok, but "Load from Json" => don't work I use json to have object.
猜你喜欢
  • 2020-08-11
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
相关资源
最近更新 更多