Вопрос

Я пытаюсь получить HTML-код в виде строки с обновлениями атрибутов.

у меня есть select тег, параметры которого я обновляю с помощью JavaScript.

По умолчанию первый option является selected используя атрибут HTML selected="selected".

Если я отключу selected из первого варианта, используя option1.selected = false и установить option2.selected = true для второго option, а затем позвоните в outerHTML из select, Я получил

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

Как вы видете, selected атрибут все еще находится на первом месте option, хотя он был перенесен на второй 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-код из externalHTML с успешными обновлениями атрибутов, потому что, если я перемещу этот 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 элемента.

(выделено мной)

Чтобы получить желаемый эффект, вам нужно option.setAttribute('selected', 'selected'), хотя вам также понадобится option.removeAtrribute('selected') по остальным вариантам.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top