Javascript 从隐藏哈希在jquery中创建关联数组
我正在尝试从隐藏的哈希创建关联数组。下面的jquery调用特定的散列,但我想用一个代码动态创建它Javascript 从隐藏哈希在jquery中创建关联数组,javascript,jquery,arrays,hash,Javascript,Jquery,Arrays,Hash,我正在尝试从隐藏的哈希创建关联数组。下面的jquery调用特定的散列,但我想用一个代码动态创建它 $(document).ready(function() { $("#tokens").tokenInput([ {id: 1, name: "Darren Criss"}, {id: 2, name: "Ann Arbor T-shirt Company"}, {id: 3, name: "StarKid Product Store"
$(document).ready(function() {
$("#tokens").tokenInput([
{id: 1, name: "Darren Criss"},
{id: 2, name: "Ann Arbor T-shirt Company"},
{id: 3, name: "StarKid Product Store"},
]);
});
我试着这样做:
$(document).ready(function() {
var variable = $("input[type='hidden'][class='stores']").val();
$("#tokens").tokenInput(variable);
});
但它不起作用
这是散列
<input id="1" class="stores" type="hidden" value="Darren Criss" taxonomies_count="9"
name="1" disabled="disabled"></input>
<input id="2" class="stores" type="hidden" value="Ann Arbor T-shirt Company"
taxonomies_count="46" name="2" disabled="disabled"></input>
<input id="3" class="stores" type="hidden" value="StarKid Productions Store"
taxonomies_count="22" name="3" disabled="disabled"></input>
您提供的源代码不是散列,而是HTML输入标记。如果要从中提取值,可以使用
我不确定一旦你有了散列,你想用它们做什么,但这应该让你开始了。你作为源代码给出的不是散列,而是HTML输入标记。如果要从中提取值,可以使用
我不确定一旦你有了散列,你想用它们做什么,但这应该可以让你开始了。你当前的代码调用
tokenInput
,但只传递一个字符串(DOM中遇到的第一个输入
元素的值。假设加载文档
时DOM中存在这些散列
var val = $("input[type='hidden'][class='stores']").val();
$("#tokens").tokenInput(val);
在功能上等同于
$("#tokens").tokenInput("Darren Criss");
它与tokenInput
所期望的参数类型不匹配(请参阅)(您在第一个代码示例中的想法似乎是正确的)。为什么不迭代jQueryinput
选择,将新的哈希对象推到列表中,最后调用tokenInput,将完整的列表传递给它:
$(document).ready(function() {
var hashes = [];
$('input.stores').each(function(i, elem) {
hashes.push({
'id': $(elem).attr('id'),
'name': $(elem).val(),
});
});
console.log(hashes);
//$('#tokens').tokenInput(hashes);
});
编辑:
什么是i和elem
我的方法是使用jQuery的内置迭代器函数each
()。此实用程序函数允许程序员轻松迭代现有集合,包括对象、数组和jQuery选择。以下是jQuery文档中看到的函数签名(缺少更好的术语):
each(集合、回调(indexInArray、valueOfElement))
您可以对任何iterable JavaScript对象(例如-foo.each(…);
)调用each
,尽管在调用之前通常会看到jQuery选择。each
希望您向其传递一个回调函数,该函数接受两个参数:索引/键参数和值/项参数(作为旁注,您还可以访问回调主体内部的this
,这是一个引用值/项的隐式参数)
each
将为集合中的每个项调用此函数一次,并根据迭代中的当前项自动为您传递适当的索引/键和值参数。jQuery选择是类似于iteray的对象:它们的行为类似于JavaScript数组,它们的“项”可以使用数值ind引用EXE(例如,调用$('div')[0]
或$('div')。get(0)
将返回与div
选择器匹配的第一个DOM元素的引用(如果页面上存在div)
当我们迭代jQuery选择时,我们迭代的“项”是对DOM元素的引用。在我的示例中,当我调用jQuery选择上的each
并为其提供回调函数时,I
被赋予选择中当前DOM元素索引的值,而elem
引用实际的元素。我们通常希望在回调函数中的这些元素上调用jQuery方法。这要求我们将元素包装为jQuery对象($(elem)
),允许我们使用jQuery的所有功能操作元素
通常,对jQuery选择调用每个,遵循以下形式:
$('your selector here').each(function(i,elem) {
var foo = $(elem); //Allows us to treat the DOM element as a jQuery object
//Do stuff ... foo.val().attr().css().toggle();
});
进一步阅读jQuery对象:
console.log(散列)是什么
我只是加入了一个console.log()
,让您可以浏览生成的哈希列表。调用tokenInput
您当前的代码调用tokenInput
,而只传递一个字符串(DOM中遇到的第一个输入
元素的值。假设加载文档
时DOM中存在这些散列
var val = $("input[type='hidden'][class='stores']").val();
$("#tokens").tokenInput(val);
在功能上等同于
$("#tokens").tokenInput("Darren Criss");
它与tokenInput
所期望的参数类型不匹配(请参阅)(您在第一个代码示例中的想法似乎是正确的)。为什么不迭代jQueryinput
选择,将新的哈希对象推到列表中,最后调用tokenInput,将完整的列表传递给它:
$(document).ready(function() {
var hashes = [];
$('input.stores').each(function(i, elem) {
hashes.push({
'id': $(elem).attr('id'),
'name': $(elem).val(),
});
});
console.log(hashes);
//$('#tokens').tokenInput(hashes);
});
编辑:
什么是i和elem
我的方法是使用jQuery的内置迭代器函数each
()。此实用程序函数允许程序员轻松迭代现有集合,包括对象、数组和jQuery选择。以下是jQuery文档中看到的函数签名(缺少更好的术语):
each(集合、回调(indexInArray、valueOfElement))
您可以对任何iterable JavaScript对象(例如-foo.each(…);
)调用each
,尽管在调用之前通常会看到jQuery选择。each
希望您向其传递一个回调函数,该函数接受两个参数:索引/键参数和值/项参数(作为旁注,您还可以访问回调主体内部的this
,这是一个引用值/项的隐式参数)
each
将为集合中的每个项调用此函数一次,并根据迭代中的当前项自动为您传递适当的索引/键和值参数。jQuery选择是类似于iteray的对象:它们的行为类似于JavaScript数组,它们的“项”可以使用数值ind引用EXE(例如,调用$('div')[0]
或$('div')。get(0)
将返回与div
选择器匹配的第一个DOM元素的引用(如果页面上存在div)
当我们迭代一个jQue时