Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.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中将字符串拆分为数组?_Javascript_Jquery - Fatal编程技术网

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
的其他功能太多了)。阿尔图