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 が更新されるように見えます。

そのため、現在の value/checkedness/selectedness を defaultValue/defaultChecked/defaultSelected プロパティにコピーするすべてのフォーム要素をループすると、探している更新された outerHTML を取得できる場合があります。

于 2010-01-14T23:10:58.250 に答える
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

:checked in jQuery と

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

おそらく、DOM ツリーをたどって HTML を自分で生成する必要があります。

于 2010-01-14T22:14:29.590 に答える
0

実際には、HTML は実際には「更新」されていません。DOM ツリーは、ご覧のとおりですが、HTML自体は同じままです (それが、innerHTML が同じ値を保持する理由です)。

于 2010-01-14T22:17:28.473 に答える