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