我需要在循环中动态创建变量,但我不知道如何。我已经阅读了有关使用的信息eval();,但我发现它只是动态更改变量内的值。
我需要这样的东西:
$(e).find('unidadeid').each(function () {
countUnidades++;
var Unidade[value inside countUnidades here] = $(this).text();
});
请清楚你的步骤。我要求的不是解决方案,而是寻求帮助,作为一种学习。谢谢 ;)
我需要在循环中动态创建变量,但我不知道如何。我已经阅读了有关使用的信息eval();,但我发现它只是动态更改变量内的值。
我需要这样的东西:
$(e).find('unidadeid').each(function () {
countUnidades++;
var Unidade[value inside countUnidades here] = $(this).text();
});
请清楚你的步骤。我要求的不是解决方案,而是寻求帮助,作为一种学习。谢谢 ;)
你有两个选择:
使用数组:
var unidades = [];
$(e).find('unidadeid').each(function () {
unidades.push($(this).text());
});
或者
var unidades = $(e).find('unidadeid').map(function () {
return $(this).text();
}).get();
如果您真的非常想拥有不仅仅是数字的名称,请使用对象和括号表示法:
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();
});
你总是可以使用数组:
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。
您的示例只是添加到我假设的具有增量值的数组中。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"
}
我怀疑你需要动态创建变量。这很少有帮助。
您可能想了解数据结构;特别是我认为你只想要一个数组:
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,或者这只是一个示例。
好吧,为了完整起见,这正是您所要求的,尽管这是一个糟糕的主意:
$(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());
});