【问题标题】:How do I clear all the fields in a variable html content? (preferably with jQuery)如何清除变量 html 内容中的所有字段? (最好使用 jQuery)
【发布时间】:2025-11-29 23:55:01
【问题描述】:

我需要重置保存在变量中的 HTML 内容中的所有表单字段。我搜索了互联网和这里。但我所发现的都没有奏效。即使对文本字段使用最简单的方法也不会成功:

var content = $(this).prev('.listset').find('ol.multiple > li:last').html();
$(content).find('input[type=text]').val('');

我没有可用的表单 ID。

【问题讨论】:

  • 不是按照OP,他不能使用id这个表单,他只想清除表单标记的特定部分。
  • 一个可能的页面标记示例可能会很有帮助。
  • @Shef 在我创建这个问题之前,我阅读了*.com/questions/680241/blank-out-a-form-with-jquery。但它没有回答我的问题。该答案显示了一种需要表单 ID 的方法。我的问题是关于没有
    标签的字符串变量。因此,如果您在关闭问题之前正确阅读该问题,我将不胜感激。现在我必须创建一个新的。

标签: javascript jquery forms field


【解决方案1】:

使用普通的旧javascript:

document.forms['my_form_name'].reset()

【讨论】:

  • 如上所述,我不能使用表单ID。我不希望重置表单中的所有字段。它只是特定列表元素中的所有字段。
  • 嗯,好的。那时我的答案不是最合适的。
【解决方案2】:

我发现了这个:

如果表单的 ID 是 myform,这应该可以解决问题:

$(':input','#myform')
 .not(':button, :submit, :reset, :hidden')
 .val('')
 .removeAttr('checked')
 .removeAttr('selected');

它使用 :input 选择器,它将匹配所有输入、文本区域、选择和按钮元素。由于我们将 #myform 作为第二个参数传递,因此它只会在此表单元素内找到输入。然后它使用 not() 过滤掉所有按钮、提交、重置和隐藏输入。然后它使用 val() 将剩余字段的值设置为空字符串,然后使用 removeAttr 删除字段的选中和选定属性,以防您有任何单选/复选框/选择输入。多田。

这里:Resetting a multi-stage form with jQuery

编辑:来自相同的网址: 如果您的复选框也有默认值,请使用这个:

 // Use a whitelist of fields to minimize unintended side effects.
    $(':text, :password, :file, SELECT', '#myFormId').val('');  
    // De-select any checkboxes, radios and drop-down menus
    $(':input', '#myFormId').removeAttr('checked').removeAttr('selected');

这就是你要找的吗?

【讨论】:

  • 查看此链接中的@powers1 答案
  • 需要修复 // 使用字段白名单来尽量减少意外的副作用。 $(':text, :password, :file, SELECT', '#myFormId').val(''); // 取消选择任何复选框、单选框和下拉菜单 $(':input', '#myFormId').removeAttr('checked').removeAttr('selected');
  • @Haim Evgi 我无法使用表单 ID。我不希望重置表单中的所有字段。它只是特定列表元素中的所有字段。
  • 将所有列表项赋予相同的类,然后通过 jquery 为该类赋予值 .val(''); ?
【解决方案3】:

如果您使用所有文本框:

for(c in document.getElementById('id_of_form').childNodes) {
    c.innerHTML = "";
}

如果您使用多个东西,请将 childNodes 替换为 getElementByTagName("name of tag") 并使用 type 进行过滤。

【讨论】:

    【解决方案4】:

    这有点猜测,因为我不知道您的标记是什么样的,但 jQuery 'find' 可能无法正常工作,具体取决于 html 字符串的结构 - 看看这个问题 -

    Using jQuery to search a string of HTML

    您可以尝试遍历“内容”字符串,然后单独更新每个表单元素并将它们添加到相关容器中,例如 -

    $(content).each(function () {
       if (this.nodeName == 'INPUT') $(this).val('');
       if (this.nodeName == 'SELECT') $(this).children('option').prop('selected','');
       $("#moveto").append(this);
    });
    

    工作演示 - http://jsfiddle.net/vFMWD/5/

    【讨论】:

    • 这是唯一感觉正确的答案。但还没有完全实现。我尝试了该方法,但它清除了表单中的所有字段。我希望仅清除将要添加的文本字符串中的字段。
    • 所以它不仅清除了“内容”字符串中的表单字段 - 还清除了页面上的所有表单字段?
    • 'content' 字符串中的内容 - 这与原始答案不同,但您可以使用正则表达式 find replace 将 'value="something"' 替换为 'value=""' ?
    • 我不太擅长正则表达式。并且内容字符串中只有 HTML 代码的 sn-p。没有
      标签。但是有输入和选择标签。
    • 不,我还没有解决问题。现在问题已经结束了。
    最近更新 更多