質問

属性更新を含む文字列として HTML コードを取得しようとしています。

私は持っています select タグのオプションは JavaScript を使用して更新します。

デフォルトでは、最初の optionselected HTML 属性を使用する selected="selected".

設定を解除したら selected 最初のオプションから使用して option1.selected = false そしてセット option2.selected = true 2番目に option, を呼び出してから、 outerHTMLselect, 、分かりました

<select>
    <option selected="selected">one</option>
    <option>two</option>
    <option>three</option>
  </select>

ご覧のように、 selected 属性はまだ最初にあります option, 、2番目に移動されましたが、 option. 。期待される結果は次のとおりです

<select>
    <option>one</option>
    <option selected="selected">two</option>
    <option>three</option>
  </select>

ここに例があります http://jsbin.com/adAbAMe/2/edit?html,js,コンソール,出力 (クリック run with js 結果を取得する) これは、 selected 属性は変更されましたが、HTML コードでは変更されません。

ただし、これを移動すると、属性が更新された最終的な HTML を、outerHTML から取得する必要があります。 select JavaScript を使用する前に行った更新はどこかで受け取れなくなります。

実際の属性値を含む文字列として HTML を取得する方法はありますか?

役に立ちましたか?

解決

selected 属性は自動的に更新されませんが、削除して適切な要素に追加するように設定できます。

//remove "selected" from first
if (i==0) {
  option.selected = false;
  option.removeAttribute("selected");
}

//add "selected" to second
if (i==1) {
  option.selected = true;
  option.setAttribute("selected", "selected");
}

これが実用的なフィドルです.

他のヒント

使用できます

option.setAttribute('selected', 'selected');

そして

option.removeAttribute('selected');

試す

$('button').click(function () {
    console.log($('select').prop('outerHTML'))
})

$('select').change(function(){
    $(this).find('option[selected]').removeAttr('selected');
    $(this).find('option:selected').attr('selected', 'selected');
})

デモ: フィドル

から DOM仕様:

選択された タイプの ブール値

対話型ユーザー エージェント内の、対応するフォーム コントロールの現在の状態を表します。この属性を変更すると、フォーム コントロールの状態が変わります。 ただし、要素の HTML selected 属性の値は変更されません。

(私のことを強調)

求めている効果を得るには、 option.setAttribute('selected', 'selected'), ただし、これも必要になります option.removeAtrribute('selected') 他のオプションについて。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top