设置一个数据属性也会清除其他属性

时间:2015-06-09 19:42:17

标签: javascript jquery html html5

我有一个函数,可以从数据属性selected-id中删除所有值。每当我将selected-id长度设置为零时,数据属性all-id也会被清除,它不应该被清除。如何在不清除all-id的情况下清除selected-id。

files.js

function deselectAll() {
    $('input:checked').each(function(_, element) {
      $(element).prop('checked', false);
      $('#file-index').data('selected-ids').length = 0;
    });
  }
  function checkAllOnPage() {
    $('#selected_files').val('all');
    var selected = $('#file-index').data('selected-ids');
    $('input[type="checkbox"]:not(:checked)').each(function(_, element) {
      $(element).prop('checked', 'checked');
      selected.push($(element).val());
    });
    selected = compact(selected);
    toggleHeaderButton();
  }

  function checkAllOnPages() {
    $('#selected_files').val('all');
    var selected = $('#file-index').data('selected-ids');
    $('input[type="checkbox"]:not(:checked)').each(function(_, element) {
      $(element).prop('checked', 'checked');
    });
    $('#file-index').data('selected-ids', $('#file-index').data('all-ids'));
    toggleHeaderButton();
  }

index.html.slim

#file-index.files-index data-selected-ids=[] data-all-ids=@file_item_ids
  .row
    = render partial: 'shared/contents_title', locals: { hide_user_nav: false }
  - if @credential.present?
    #file-header.row
      = render "file_items/header"

2 个答案:

答案 0 :(得分:2)

设置和更新元素数据对象的属性应该直接通过data()方法处理,作为具有两个参数的setter。

如果selected-ids是存储在元素数据对象中的数组,则应通过将属性的名称和空数组传递给setter来重置它。

$('#file-index').data('selected-ids', []);

答案 1 :(得分:1)

尝试使用以下代替$('#file-index')。data('selected-ids')。length = 0;

$('#file-index').removeData('selected-ids');