2

我需要在循环中动态创建变量,但我不知道如何。我已经阅读了有关使用的信息eval();,但我发现它只是动态更改变量内的值。

我需要这样的东西:

$(e).find('unidadeid').each(function () {
    countUnidades++;
    var Unidade[value inside countUnidades here] = $(this).text();
});

请清楚你的步骤。我要求的不是解决方案,而是寻求帮助,作为一种学习。谢谢 ;)

4

5 回答 5

8

你有两个选择:

  1. 使用数组:

    var unidades = [];
    $(e).find('unidadeid').each(function () {
        unidades.push($(this).text());
    });
    

    或者

    var unidades = $(e).find('unidadeid').map(function () {
        return $(this).text();
    }).get();
    
  2. 如果您真的非常想拥有不仅仅是数字的名称,请使用对象和括号表示法:

    var unidades = {}, countUnidades = 0;
    $(e).find('unidadeid').each(function () {
        countUnidades++
        unidades['Unidade' + countUnidades] = $(this).text();
    });
    

    这将创建一个对象 ,unidades具有诸如Unidade0,Unidade1等属性。注意each接收索引,因此您不需要countUnidades它,除非您想要它用于其他用途:

    var unidades = {};
    $(e).find('unidadeid').each(function (index) {
        unidades['Unidade' + index] = $(this).text();
    });
    
于 2013-04-03T11:52:42.220 回答
5

你总是可以使用数组:

var Unidade = [],
    countUnidades = 0;

$(e).find("unidadeid").each(function(i) {
    Unidade[countUnidades++] = $(this).text();

    // ... or Unidade.push($(this).text());
    // ... or Unidade[i] = $(this).text();
});

不要忘记 DOM 元素应该总是有唯一的ID,所以each这里不需要迭代,如果unidadeid指的是某个元素的 ID。

于 2013-04-03T11:49:50.597 回答
2

您的示例只是添加到我假设的具有增量值的数组中。Unidade 在 JSON 中看起来像这样:

[
    0: "text0",
    1: "text1",
    2: "text2"
]

但是,如果您想将其添加到对象中,您只需遍历一个字符串数组,其中该数组的长度与您的项目列表的长度相同。事实上,您可能希望将此值附加到数据属性,其中值是变量名称,文本是元素的内容。所以 HTML 应该是这样的:

<div data-var="a">Text1</div>
<div data-var="b">Text2</div>
<div data-var="c">Text3</div>

需要这个JS:

var unidade = {};

$("div").find('unidadeid').each(function() {
    unidade[$(this).data('var')] = $(this).text();
});

console.log(unidade);

对象看起来像这样:

{
    "a": "Text1",
    "b": "Text2",
    "c": "Text3"
}
于 2013-04-03T11:59:52.853 回答
1

我怀疑你需要动态创建变量。这很少有帮助。

您可能想了解数据结构;特别是我认为你只想要一个数组:

var unidades = []; // declare the array outside the loop
$(e).find('unidadeid').each(function () {
    countUnidades++;
    unidades[countUnidades] = $(this).text();
});

现在你有了一个数组,unidades它的值是text()你元素的内容。

我不确定是否find('unidadeid')是您想要的 - 查找所有<unidadeid>元素,这不是 HTML 元素,但也许您正在处理自定义 XML,或者这只是一个示例。

于 2013-04-03T11:52:31.053 回答
1

好吧,为了完整起见,这正是您所要求的,尽管这是一个糟糕的主意:

$(e).find('unidadeid').each(function () {
  countUnidades++;
  var t = $(this).text();
  eval('Unidade' + countUnidades + ' = t;');
});

笔记:

  • eval在不打开安全漏洞的情况下很难使用。
  • eval是缓慢的。
  • 动态创建变量毫无意义,因为您还需要动态访问它们。
  • 这些变量是全局的(否则它们将是回调函数的本地变量,并在创建后立即消失)。

通常你会使用一个数组来代替:

var Unidade = [];
$(e).find('unidadeid').each(function () {
  Unidade.push($(this).text());
});
于 2013-04-03T11:59:01.650 回答