Javascript 当字符串中只有一个元素时,如何在jQuery中将字符串拆分为数组?
我有一段代码,它接受一个字符串并将其拆分为一个数组:Javascript 当字符串中只有一个元素时,如何在jQuery中将字符串拆分为数组?,javascript,jquery,Javascript,Jquery,我有一段代码,它接受一个字符串并将其拆分为一个数组: nodes = $("#" + model_id + "-" + node_class + "--" + "title").data("nodes").split(",") 当字符串中只有一个元素(没有逗号)时,变量“nodes”不是数组,而是正则变量。因此,当我尝试迭代“节点”中的每个元素时,如果原始字符串只包含一个元素,则不会发生任何事情。如果它有几个元素,那么一切都正常 $.each(nodes, function (id, node
nodes = $("#" + model_id + "-" + node_class + "--" + "title").data("nodes").split(",")
当字符串中只有一个元素(没有逗号)时,变量“nodes”不是数组,而是正则变量。因此,当我尝试迭代“节点”中的每个元素时,如果原始字符串只包含一个元素,则不会发生任何事情。如果它有几个元素,那么一切都正常
$.each(nodes, function (id, node_id) {
if ($("#" + model_id + "-" + node_class + "-" + node_id + "-" + "chkbx").is(":checked")) {
counter ++
}
})
我曾尝试将“nodes”声明为数组,但当我分配分割的字符串时,结果都是一样的。因为我使用“拆分”来赋值,所以我认为我不能使用“推送”将值附加到数组中
我试着把方括号放在每个地方,我想,比如:
[nodes] = $("#" + model_id + "-" + node_class + "--" + "title").data("nodes").split(",")
。。。但那没用
除了检查“节点”是否为数组,然后编写不同的代码来处理这两个选项之外,还有什么解决方案吗
当字符串中只有一个元素(没有逗号)时,变量“nodes”不是数组,而是正则变量
A) 引用数组的变量是正则变量。B) 这不是split
的工作方式<代码>拆分始终返回一个数组。如果分隔符不在字符串中,则生成的数组长度为一个元素。()因此只要数据
返回字符串,节点
将被设置为数组。但是请注意,data
并不总是返回字符串,因此data(“节点”)。拆分(“,”
可能会失败,错误是split
不是函数,因为data
可以返回null
或对象以及string
。如果您知道由于应用程序逻辑的原因,它将始终是一个字符串,这很好,但是如果是这样,节点
将始终是一个数组,这就是我提到它的原因
下面是您的评论:迭代在单元素数组上工作得很好:
我怀疑您需要查看浏览器中的JavaScript控制台,我打赌您会发现发生了一个错误,它阻止了迭代代码的运行
当字符串中只有一个元素(没有逗号)时,变量“nodes”不是数组,而是正则变量
A) 引用数组的变量是正则变量。B) 这不是split
的工作方式<代码>拆分始终返回一个数组。如果分隔符不在字符串中,则生成的数组长度为一个元素。()因此只要数据
返回字符串,节点
将被设置为数组。但是请注意,data
并不总是返回字符串,因此data(“节点”)。拆分(“,”
可能会失败,错误是split
不是函数,因为data
可以返回null
或对象以及string
。如果您知道由于应用程序逻辑的原因,它将始终是一个字符串,这很好,但是如果是这样,节点
将始终是一个数组,这就是我提到它的原因
下面是您的评论:迭代在单元素数组上工作得很好:
我怀疑您需要查看浏览器中的JavaScript控制台,我敢打赌您会发现一个错误正在发生,这会阻止您的迭代代码运行。您是否可以发布某种演示,至少重现您的问题(或者至少解释/演示它)或类似的问题?可能有另一种方法可以解决这个问题,而我仅仅通过查看jQuery是看不到的。出于这个原因,Split应该总是返回一个数组。我支持@DavidThomas的评论,一个完整的例子会很有帮助。你能发布一些类似的演示来重现你的问题(或者至少解释/演示它)吗?可能有另一种方法可以解决这个问题,而我仅仅通过查看jQuery是看不到的。出于这个原因,Split应该总是返回一个数组。我支持@DavidThomas的评论,一个完整的例子会很有帮助。谢谢你的解释。我的问题还是一样。如果字符串有一个元素,则迭代似乎不起作用。@JohanHovda:问题出在您没有引用的代码中,迭代在单元素数组上运行得很好:@JohanHovda我想这可能取决于您循环使用的复选框的某个错误名称…@t.J.Crowder:谢谢您的详细解释。要将数据转换为字符串,我将“.data”(“nodes”)替换为“.attr”(“data nodes”)”,现在它可以工作了。@JohanHovda:很高兴你把它整理好了,我想这是因为
attr
总是返回字符串(当然,除了tabindex
等等)。我想我对使用data
访问data-*
属性的偏执是有道理的(我总是使用attr
来获取属性,因为data
的其他功能太多了)。虽然在一个简单的测试中,data
似乎也会返回字符串:您的页面必须更复杂。:-)好啊谢谢你的解释。我的问题还是一样。如果字符串有一个元素,则迭代似乎不起作用。@JohanHovda:问题出在您没有引用的代码中,迭代在单元素数组上运行得很好:@JohanHovda我想这可能取决于您循环使用的复选框的某个错误名称…@t.J.Crowder:谢谢您的详细解释。要将数据转换为字符串,我将“.data”(“nodes”)替换为“.attr”(“data nodes”)”,现在它可以工作了。@JohanHovda:很高兴你把它整理好了,我想这是因为attr
总是返回字符串(当然,除了tabindex
等等)。我想我对使用data
访问data-*
属性的偏执是有道理的(我总是使用attr
来获取属性,因为data
的其他功能太多了)。阿尔图