Remove Sibling 正在删除 jquery 中的额外元素

Remove Sibling is removing extra elements in jquery

这是我的作品之一 html

<label class="checkbox" data-appid="1" data-moduleid="1" data-permissionid="128" data-processid="1" data-screenid="1">
  <input type="checkbox" name="screen_permission_id[128]" value="128" checked="checked">
  <span></span>
  Add
这是我的 jquery 代码
$(document).on('change', 'input:checkbox', function() {
   console.log($(this))
    if ($(this).is(':checked') == false) {
        $(this).siblings($('input[type=hidden]')).remove()
    } else {
        let tr = $(this).closest('label');

        let appid = tr.attr("data-appid")
        let moduleid = tr.attr("data-moduleid")
        let permissionid = tr.attr("data-permissionid")
        let processid = tr.attr("data-processid")
        let screenid = tr.attr("data-screenid")

        $(this).closest('label').append('<input type="hidden" name="app_module_id[' + permissionid + ']" value="' + moduleid + '"> <input type="hidden" name="module_process_id[' + permissionid + ']" value="' + processid + '"><input type="hidden" name="process_screen_id[' + permissionid + ']" value="' + screenid + '">')
    }



})

当我取消选中复选框时。除了隐藏的输入,它还会删除我的 span 变量。我怎样才能避免这种情况。

您可以使用 not 选择兄弟姐妹,如 jquery doc 中所述。

$(this).siblings($('input[type=hidden]')).not("span").remove()

$(document).on('change', 'input:checkbox', function() {
    if ($(this).prop('checked') == false) {
        $(this).siblings($('input[type=hidden]')).not("span").remove()
        console.clear();
    } else {
        let tr = $(this).closest('label');

        let appid = tr.attr("data-appid")
        let moduleid = tr.attr("data-moduleid")
        let permissionid = tr.attr("data-permissionid")
        let processid = tr.attr("data-processid")
        let screenid = tr.attr("data-screenid")

        $(this).closest('label').append('<input type="hidden" name="app_module_id[' + permissionid + ']" value="' + moduleid + '"> <input type="hidden" name="module_process_id[' + permissionid + ']" value="' + processid + '"><input type="hidden" name="process_screen_id[' + permissionid + ']" value="' + screenid + '">')
        console.log('<input type="hidden" name="app_module_id[' + permissionid + ']" value="' + moduleid + '"> <input type="hidden" name="module_process_id[' + permissionid + ']" value="' + processid + '"><input type="hidden" name="process_screen_id[' + permissionid + ']" value="' + screenid + '">')
    }



})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label class="checkbox" data-appid="1" data-moduleid="1" data-permissionid="128" data-processid="1" data-screenid="1">
      <input type="checkbox" name="screen_permission_id[128]" value="128" checked="checked">
      <span>Add</span>