最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - split() doesn't work with only 1 value - Stack Overflow

programmeradmin2浏览0评论

Is there a way to make split() to work with only one value?

If you change data-ids in the following code to a single string of 122 then split returns nothing and it should return 122.

/

var ids = $('div').data('ids').split(',');

$(ids).each(function(key, value) {
	$('div').append('Value: ' + value + '<br>');
});
<script src=".1.1/jquery.min.js"></script>
<div data-ids="122,154,344"></div>

Is there a way to make split() to work with only one value?

If you change data-ids in the following code to a single string of 122 then split returns nothing and it should return 122.

https://jsfiddle/mghwscox/

var ids = $('div').data('ids').split(',');

$(ids).each(function(key, value) {
	$('div').append('Value: ' + value + '<br>');
});
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div data-ids="122,154,344"></div>

Share Improve this question asked Apr 6, 2016 at 17:24 scorpio1441scorpio1441 3,08810 gold badges41 silver badges79 bronze badges 1
  • 1 To whomever downvoted, care to elaborate? This is a good question that helps to demonstrate an important "gotcha" with retrieving values from data attributes. – jeffdill2 Commented Apr 6, 2016 at 17:43
Add a ment  | 

5 Answers 5

Reset to default 4
var ids = $('div').data('ids').toString().split(',');

$(ids).each(function(key, value) {
    $('div').append('Value: ' + value + '<br>');
});

Notice that I added toString() in your ids declaration.

data() tries to do a type conversion when it reads the data. So you have two choices.

You can use data() and have to use toString() to make sure you have a string.

var ids = $('div').data('ids').toString().split(',');

Other option is to not use data() and use attr() to read the value.

var ids = $('div').attr("data-ids").split(',');

With jQuery you can store the value as an plain array.

<div id="source" data-ids="[122,154,344]"></div>
<script>
    var list = $("#source").data('ids');
    console.log(list.length); //3
</script>

A working snippet:

<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="source" data-ids="[122,154,344]"></div>
<div id="target"></div>

<script>
    var list = $("#source").data('ids');
    $("#target").html(JSON.stringify(list) + " has " + list.length + " elements"); // 3
</script>

note: the reason your code fails with one number is because jQuery converts the one number into a Number object and 'Number' objects have no split method.

When the users gives only one number it is taken as number and since split() method does not exists for numbers, its gives error. And if you provide ma-separated value it is getting treated as string and hence works fine.

var ids = $('div').data('ids');
console.log(ids,typeof ids);
ids = ids.toString().split(',');;

$(ids).each(function(key, value) {
	$('div').append('Value: ' + value + '<br>');
});
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div data-ids="122"></div>

Try converting it to string before split

var ids = ($('div').data('ids')+'').split(',');


$(ids).each(function(key, value) {
    $('div').append('Value: ' + value + '<br>');
});
发布评论

评论列表(0)

  1. 暂无评论