我正在try 使用document.cloneNode(true)来克隆/复制包含表单的现有html页面,但这不能捕获用户输入.

我有一个js脚本嵌入在一个html页面与表单,并试图使用document.cloneNode(true)来克隆该页面,并将其保存在一个s3桶.当用户单击Submit按钮时,js函数运行以克隆html页面.

问题是在克隆HTML页面时,cloneNode()不包括用户输入.我判断了docs-https://developer.mozilla.org/en-US/docs/Web/API/Node/cloneNode,但没有找到对此用例的处理.

这是cloneNode()的预期行为吗?如果是这样的话,我如何才能达到让用户像这样输入的要求-

<input type='text' value='John Doe'>

而不是

<input type='text'>

我必须手动设置每个输入字段中的值吗?可以有不同类型的输入,如复选框,日期等,所以我认为应该有一个更好的方法来实现这一点.

推荐答案

input元素的值不会反映在其value属性(或任何其他属性)中,尽管其名称如此.value属性提供输入的default value,而不是其当前值,即使HTMLInputElement实例的value property提供的是当前值.这是DOM令人困惑的事情之一.以下是细目:

Item Attribute Property
Default value value defaultValue
Current value none value

如果您想要一个能够捕获用户在input个元素上的当前输入文本(以及他们在select个元素上的当前选定项)的HTML字符串,则必须自己实现该功能,可能需要使用data-*个属性.

下面是input个元素的简单示例:

// Respond to the `input` event by updating an attribute on the
// input element
document.addEventListener("input", ({target}) => {
    if (target instanceof HTMLInputElement) {
        target.setAttribute("data-current-value", target.value);
    }
});

// Hook up the button to show the HTML:
document.querySelector("[value='Show HTML']").addEventListener("click", () => {
    for (const input of document.querySelectorAll("input[type=text]")) {
        console.log(input.outerHTML);
    }
});
A: <input type="text" name="a">
<br>
B: <input type="text" name="b">
<br>
<div><input type="button" value="Show HTML"></div>

在该示例中,我将在值更改时获取这些值,但您也可以在克隆文档之前执行此操作.

Javascript相关问答推荐

禁用从vue.js 2中的循环创建的表的最后td的按钮

useNavigation更改URL,但不呈现或显示组件

Phaser 3 console. log()特定游戏角色的瓷砖属性

为什么ngModel不能在最后一个版本的Angular 17上工作?'

处理时间和字符串时MySQL表中显示的日期无效

使用Promise.All并发解决时,每个promise 的线性时间增加?

我怎么在JS里连续加2个骰子的和呢?

当使用';字母而不是与';var#39;一起使用时,访问窗口为什么返回未定义的?

在我的index.html页面上找不到我的Java脚本条形图

在数组中查找重叠对象并仅返回那些重叠对象

使用Nuxt Apollo在Piniastore 中获取产品细节

当我在Reaction中创建一个输入列表时,我的输入行为异常

Jest toHaveBeenNthCalledWith返回当前设置的变量值,而不是调用时的值

如何使用<;Link>;执行与JS Reaction中的";window.Location=/GameOverDied;";类似的操作?

如何使用Cypress在IFRAME中打字

为什么这个最小Angular 的Licial.dev设置不起作用?

如何处理不带参数的redux thunk payloadCreator回调函数?

如何使用fltter_js将对象作为参数传递给javascrip?

当一条路由在Reaction路由中命中时,如何有条件地渲染两个组件或更改两个插座?

元素类型无效:应为字符串(对于内置组件)或类/函数(对于复合组件),但GET:Object.在Reaction项目中