jQuery的每一个检查,并从数据属性获取值到数组

时间:2018-12-03 08:30:35

标签: jquery arrays

我有这样的html标签

<input type="checkbox" class="chekship" data-kp="NORT180606" data-po="4000779848" checked>
<input type="checkbox" class="chekship" data-kp="NORT180607" data-po="4000776985" checked>
<input type="checkbox" class="chekship" data-kp="NORT180707" data-po="4000777001" checked>

问题是当我尝试使用这些代码推送数组

$('.chekship:checked').each(function() {
                data.push($(this).data("kp"),$(this).data("po"));       
            });

我得到的结果是

array(6) {
[0]=>
  string(10) "NORT180606"
[1]=>
  string(10) "4000779848"
[2]=>
  string(10) "NORT180607"
[3]=>
  string(10) "4000776985"
[4]=>
  string(10) "NORT180707"
[5]=>
  string(10) "4000777001"
}

我需要根据这些输入分隔此数组的什么

 [0]=>
       [0]=>
      string(10) "NORT180606"
      [1]=>
      string(10) "4000779848"
[1]=>
       [0]=>
      string(10) "NORT180607"
      [1]=>
      string(10) "4000776985"
[2]=>
       [0]=>
      string(10) "NORT180707"
      [1]=>
      string(10) "4000777001"

我该怎么做?有点让我感到困惑。

2 个答案:

答案 0 :(得分:3)

只需将 array 推入data,而不是将两个单独的参数传递给push(这会将两个单独的项添加到数组):

$('.chekship:checked').each(function() {
  data.push([
    $(this).data("kp"),
    $(this).data("po")
  ]);
});

.map可能比.each更合适,因为您要为匹配中的每个项目创建一个新数组:

const data = $('.chekship:checked')
  .map(function() {
    return [
      $(this).data("kp"),
      $(this).data("po")
    ];
  })
  .get();

或者,根本不需要像jQuery这样的大型库,就可以实现以下简单操作:

const data = Array.prototype.map.call(
  document.querySelectorAll('.chekship:checked'),
  ({ dataset: { kp, po } }) => [kp, po]
);

答案 1 :(得分:0)

const data = $('.chekship:checked');

const resultArr = Array.prototype.map.call(data, function(ele) {
        return [ele.getAttribute('data-kp'), ele.getAttribute('data-po')];
});

console.log(resultArr);