我有一些我正在挣扎的代码。好消息是代码按单个实例工作;经过一番思考后,我决定在页面上展示多个这些图像选择器。这是有效的,但重复代码的丑陋方法不能很好地扩展(例如,如果你想要其中的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返回字符串的长度,而不是数组元素。如何判断此代码是否引用特定数组?请查看小提示,以便更好地了解标记和代码:jsFiddle
我毫不怀疑有更好的方法。我对前端工作比较陌生,我很欣赏任何见解,我已经烧掉了一些脑细胞,谢谢!
答案 0 :(得分:1)
从查看HTML看起来就像这样:
var dataArray = $(this).closest("[id^=carousel]").data('array');
你要做的是用.data()
读取数组的名称,然后以某种方式将该名称(这是一个字符串)转换为变量中的数组。我的猜测是,可能有更好的方法来构建代码,而不是在HTML中添加javascript变量名。我可能会在HTML中放置一个键名,然后将数组存储在一个对象中,您可以随时通过该键访问它们。
不试图重构您的代码,这里是您想要实现的目标的想法:
如果selectedSlidesIdArray1
是全局变量,那么您可以这样做:
var dataArray = window[$(this).closest("[id^=carousel]").data('array')];
在对象上使用[stringVariable]表示法,允许您通过文字字符串或包含字符串的变量访问属性。由于所有全局变量也是window
对象的属性,因此您可以通过这种方式对全局变量执行此操作。
如果selectedSlidesIdArray1
不是全局变量,那么你应该把它放在一个对象中然后你可以这样做:
var dataArray = yourObj[$(this).closest("[id^=carousel]").data('array')];
答案 1 :(得分:0)
为什么不使用另一个数组,而不是尝试将任意字符串转换为同名的JavaScript变量?您可以拥有嵌套数组,也就是说数组数组。
因此,代替selectedSlidesIdArray1
,selectedSlidesIdArray2
等,您将拥有一个带有子数组的selectedSlidesIdArray
,然后您可以使用数据属性提取索引。< / p>