2013-11-25 3 views
0

У меня есть выбор, следующий - вывод консоли.HTML: получить специальный символ без формирования

> select.options[select.selectedIndex] 
    <option value=​"49">​books & stationary​</option>​ 
> select.options[select.selectedIndex].innerHTML; 
    "books &amp; stationary" 

При использовании innerHTML называют его форматирует значение и заменяет & с &amp;, как я могу получить неформатированное значение?

+0

Использование 'pre' тега? –

+0

Заменяет "&" на "&"? или вы хотели заменить «&» на «& amp»? – Chelseawillrecover

+0

использовать 'decodeURIComponent (select.options [select.selectedIndex] .innerHTML)' – Prabhuram

ответ

2

При запросе innerHTML вы запрашиваете HTML. В HTML символ & является особенным, и технически ошибка заключается в записи books & stationery - он должен сказать books &amp; stationery. Браузер достаточно умен, чтобы понять, что вы имеете в виду, когда он не является двусмысленным, и исправить его. Таким образом, когда вы запрашиваете HTML обратно, вы получаете исправленное значение.

Если вы хотите получить текст, это другое дело. Используйте .textContent вместо .innerHTML.

Если вы уже получили в HTML и хотите лишить HTML-разметку и получить текст из него, вы можете это сделать:

function strip_html_to_text(html) { 
    var el = document.createElement('div'); 
    el.innerHTML = html; 
    return el.textContent; 
} 
+0

Написание «книг и канцелярских принадлежностей» - это не ошибка, за исключением XHTML. И '&' хранится как таковой в DOM. Это сериализация, вызванная ссылкой на 'innerHTML', которая преобразует ее в' &'. –

1

Он оказался довольно простым. Текстовый вызов функции дает текст, который я искал

select.options [select.selectedIndex] .text;

output: books & stationary 
+0

Это лучший ответ, так как свойство 'text' поддерживается всеми браузерами. (У свойства 'textContent' не хватает поддержки в IE 8 и старше.) –

1

Использование заменить вместе с TextContent вместо innerHTML:

select.options[select.selectedIndex].textContent.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); 
1

Если вы хотите получить только текст выбранной опции. Вы можете использовать .textContent вместо .innerHTML.

Try this

.textContent

Смежные вопросы