Question

J'essaie d'obtenir le code HTML sous forme de chaîne avec les mises à jour d'attributs.

j'ai un select tag, dont je mets à jour les options à l’aide de JavaScript.

Par défaut, un premier option est selected en utilisant l'attribut HTML selected="selected".

Si je désactive selected à partir de la première option en utilisant option1.selected = false Et mettre option2.selected = true pour la seconde option, puis appelez le outerHTML d'un select, Je reçois

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

Comme vous pouvez le voir, selected l'attribut est toujours sur le premier option, alors qu'il a été déplacé vers le deuxième option.Le résultat attendu est

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

Voici un exemple http://jsbin.com/adAbAMe/2/edit?html,js,console,output (Cliquez sur run with js pour obtenir un résultat) qui montre que si un selected L'attribut a été modifié, il ne change pas dans le code HTML.

Mais j'ai besoin d'obtenir le code HTML final d'outerHTML avec les mises à jour d'attributs réussies, car si je déplace ceci select quelque part, je ne recevrai aucune mise à jour que j'ai effectuée avant d'utiliser JavaScript.

Existe-t-il une méthode pour obtenir le code HTML sous forme de chaîne avec les valeurs réelles des attributs ?

Était-ce utile?

La solution

Le selected L'attribut n'est pas automatiquement mis à jour, mais vous pouvez le configurer pour qu'il soit supprimé et ajouté aux éléments appropriés.

//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");
}

Voici un violon qui fonctionne.

Autres conseils

Vous pouvez utiliser

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

et

option.removeAttribute('selected');

Essayer

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

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

Démo : Violon

Du Spécification DOM:

choisi de type booléen

Représente l’état actuel du contrôle de formulaire correspondant, dans un agent utilisateur interactif.La modification de cet attribut modifie l'état du contrôle de formulaire, mais ne modifie pas la valeur de l'attribut HTML sélectionné de l'élément.

(c'est moi qui souligne)

Pour obtenir l'effet que vous recherchez, vous voulez option.setAttribute('selected', 'selected'), même si vous aurez également besoin option.removeAtrribute('selected') sur les autres options.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top