-2

我有一个带有表格的网站。表单由用户填写数据,例如我向用户显示:

 <input type='text' value="" name="dsa" />

他用“3”的值填充它;

然后他点击“保存”按钮。现在我想拥有网站的整个 HTML,包括字段的值。所以我使用:

document.documentElement.innerHTML

但我得到:

 <input type='text' value="" name="dsa" />

但我想得到这个:

 <input type='text' value="3" name="dsa" />

注意 我想获取网站的整个 HTML,而不仅仅是一个字段。我不知道网站上会有哪些字段,所以我需要一个通用的解决方案。

4

3 回答 3

2

AFAIK 您无法从 HTML 代码中获得此信息,因为当用户在 Input 文本字段中输入内容时,HTML 代码不会更改。

您可以做的是获取页面上的所有输入字段并通过以下方式获取它们的值:

var inputs, index;

inputs = document.getElementsByTagName('input');
for (index = 0; index < inputs.length; ++index) {
    // deal with inputs[index] element.
}

代码来自这篇文章:https ://stackoverflow.com/a/2214077/312312 我懒得把它写下来:P

于 2012-07-24T13:48:11.037 回答
1

在 jQuery 我做

$(function() {
    $('input').keyup(function() {
       $(this).attr('value', $(this).val());
    }); 

});​

因为 key up 后没有设置 value 属性

于 2012-07-24T13:52:53.593 回答
-1

您可以尝试在整个文档上设置实时事件,将属性设置为带有用户设置值的 html 或在您的提交中设置它们。

以第一种方式为例

$("body").on("change", "select,input,textarea", function(){
  $(this).attr("value", $(this).val());
});

但这不应该如此盲目地进行,您会遇到重置问题。您应该解决选定单选、复选框和其他属性的问题,而不仅仅是值。

第二种方法是在真正需要时序列化整个页面。

var serialize = function(el){
   $("select, input, textarea").each(function(){
     $(this).attr("value", $(this).val()); //the same way as upper
   });
}
$(".serialize").click(function(){
  var inner = $("body"),
      html;
  serialize(inner);
  html = inner.html(); //here you will get whole html with setted attributes
});

这种方式似乎更好,因为不会有不必要的事件委托。

http://jsfiddle.net/CeAXL/2/ - 测试示例。

但在这两种方式中,为 DOM 本身设置永久值并不是一个好主意。

于 2012-07-24T14:07:27.637 回答