Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery Id选择和动态数组_Javascript_Jquery_Html_Css_Arrays - Fatal编程技术网

Javascript jQuery Id选择和动态数组

Javascript jQuery Id选择和动态数组,javascript,jquery,html,css,arrays,Javascript,Jquery,Html,Css,Arrays,我有一些代码我正在挣扎。好消息是,代码按预期在单个实例中工作;经过一番思考,我决定在一个页面上设置多个这样的图像选择器。这是可行的,但是复制代码的丑陋方法不能很好地扩展(例如,如果你想在那里放50个呢?)。阵列是解决这一问题的理想方案吗 目标 我有一系列的图像,用户可以从中选择,最多X个数量。选定的图像ID存储在一个数组中,并将图像添加到“选定图像池”中。这是通过对滑块使用onClick实现的,我从元素属性获取Id。这就是我被卡住的地方 var dataArray = $(this).close

我有一些代码我正在挣扎。好消息是,代码按预期在单个实例中工作;经过一番思考,我决定在一个页面上设置多个这样的图像选择器。这是可行的,但是复制代码的丑陋方法不能很好地扩展(例如,如果你想在那里放50个呢?)。阵列是解决这一问题的理想方案吗

目标 我有一系列的图像,用户可以从中选择,最多X个数量。选定的图像ID存储在一个数组中,并将图像添加到“选定图像池”中。这是通过对滑块使用onClick实现的,我从元素属性获取Id。这就是我被卡住的地方

var dataArray = $(this).closest("[id^=carousel]").data('array');
var slideCounter = $(this).closest("[id^=carousel]").data('counter');
slideCounter = dataArray.length;
slideCounter返回字符串的长度,而不是数组元素。如何告诉此代码引用特定数组?有关标记和代码的更多信息,请参见fiddle:


我毫不怀疑有更好的办法。我对前端工作还比较陌生,如果有任何见解,我将不胜感激,我在这方面烧掉了一些脑细胞,谢谢

通过查看HTML,您执行以下操作时:

var dataArray = $(this).closest("[id^=carousel]").data('array');
您要做的是使用
.data()
读取数组的名称,然后以某种方式将该名称(字符串)转换为变量中的数组。我的猜测是,可能有更好的方法来构造代码,而不是将javascript变量名放入HTML中。我可能会在HTML中输入一个键名,然后将数组存储在一个对象中,您可以随时通过该键名访问它们

在不重构代码的情况下,以下是您试图实现的目标:

如果
selectedSlidesIdArray1
是一个全局变量,则可以执行以下操作:

var dataArray = window[$(this).closest("[id^=carousel]").data('array')];
var dataArray = yourObj[$(this).closest("[id^=carousel]").data('array')];
在对象上使用[stringVariable]表示法,可以通过文本字符串或包含字符串的变量访问属性。由于所有全局变量也是
窗口
对象上的属性,因此可以通过这种方式为全局变量执行此操作

如果
selectedSlidesIdArray1
不是全局变量,则可能应该将其放入对象中,然后可以执行以下操作:

var dataArray = window[$(this).closest("[id^=carousel]").data('array')];
var dataArray = yourObj[$(this).closest("[id^=carousel]").data('array')];

与其尝试将任意字符串转换为同名的JavaScript变量,为什么不使用另一个数组呢?可以有嵌套数组,也就是说一个数组数组


因此,与
selectedSlidesIdArray1
selectedSlidesIdArray2
等不同,您将拥有一个带有子数组的
selectedSlidesIdArray
,然后可以使用数据属性提取索引。

这将适用于现有代码,但我同意,当你在HTML中存储JS变量名时,似乎需要进行重构。@Two Bitalchest-yep,这也是我在回答中所说的。