4

我想获取可能已被用户更改的元素的 innerHTML。

因此,例如,我想知道单选按钮的状态:

<input type="radio" name="Q_209" value="A" checked>

或者

<input type="radio" name="Q_209" value="A">

在现代浏览器中,innerHTML 仅在页面加载时给出原始标签(如在此处详细讨论):它不记录单选按钮是否已被用户选中。

有什么安全的方法来获取更新的 HTML?我知道有一些方法可以在 Javascript 中获取单选按钮本身的状态,但我想要的是完整的、更新的 HTML。

谢谢!

4

5 回答 5

3

如前所述,HTML 不存储表单元素的当前状态。HTML 定义表单元素的初始或默认状态。DOM 存储可变的表单状态。

例如,这个 HTML

<input type="radio" name="Q_209" value="A" checked>

会将元素的 defaultChecked 属性设置为 true,即使选中了组中的其他单选按钮,该属性也会持续存在。

更改 defaultChecked 属性确实会更新 outerHTML。

因此,如果您遍历所有表单元素,将当前值/已检查/已选择属性复制到 defaultValue/defaultChecked/defaultSelected 属性,那么您可能能够获得您正在寻找的更新后的 outerHTML。

于 2010-01-14T23:10:58.250 回答
0

你想要:checked in jQuery 和

$('input[type=radio]:checked').html()
于 2010-01-14T20:44:13.240 回答
0

据我所知,HTML 元素属性的实际顺序可以由浏览器解释,因此没有可靠的方法来确定您是否正在处理<input type="radio" name="Q_209" value="A" checked><input checked="true" name="Q_209" value="A" type="radio">

for ... in但是,您可以使用语句获取元素的所有属性和值:

var foo = document.getElementById('form_id')['Q_209'];
var foo_properties = [];

for (var prop in foo) {
   // do something with prop and foo[prop];      
}

这意味着您可以将元素中找到的属性与您实际关心的属性子集(特定于此特定标签或更大范围的“html”属性)进行比较,以获取元素的“html 状态”并能够重建它,或者它的字符串表示。

var input_foo = document.getElementById('form_id')['Q_209'];
var awesome_properties = {'type':'','name':'','value':'','checked':''};
var tag = '<input ';
var properties = '';

for (var prop in foo) {
   if (prop in awesome_properties) {
      properties += ' '+prop+'="'+foo[prop]+'"';
   }
}

tag += properties;
tag += '>';

window.alert(tag);
于 2010-01-14T20:52:27.200 回答
0

您可能必须自己遍历 DOM 树并生成 HTML

于 2010-01-14T22:14:29.590 回答
0

事实是 HTML 并没有真正“更新”。DOM 树是,这就是您所看到的,但 HTML本身保持不变(这就是 innerHTML 保持相同值的原因)

于 2010-01-14T22:17:28.473 回答