Javascript HTML:获取特殊字符而不进行格式化

Javascript HTML:获取特殊字符而不进行格式化,javascript,html,select,Javascript,Html,Select,我有一个选择,下面是控制台输出 > select.options[select.selectedIndex] <option value=​"49">​books & stationary​</option>​ > select.options[select.selectedIndex].innerHTML; "books &amp; stationary" >选择.options[选择.selectedIndex] ​书籍和文具​​

我有一个选择,下面是控制台输出

> select.options[select.selectedIndex]
  <option value=​"49">​books & stationary​</option>​
> select.options[select.selectedIndex].innerHTML;
  "books &amp; stationary"
>选择.options[选择.selectedIndex]
​书籍和文具​​
>select.options[select.selectedIndex].innerHTML;
“书籍和文具”

当我使用innerHTML调用时,它会格式化值并将
&
替换为
&如何获得未格式化的值?

在要求
内部HTML
时,您要求的是HTML。在HTML中,
字符是特殊的,从技术上讲,写
书籍和文具
——应该是
书籍和文具是错误的;信纸
。浏览器足够智能,可以在不含糊的情况下识别您的意思,并纠正它。因此,当您要求返回HTML时,您得到的是正确的值

如果你想要文本,那是另一回事。使用
.textContent
而不是
.innerHTML

如果您已经获取了HTML,并且希望剥离HTML标记并从中获取文本,则可以执行以下操作:

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

在要求
innerHTML
时,您要求的是HTML。在HTML中,
字符是特殊的,从技术上讲,写
书籍和文具
——应该是
书籍和文具是错误的;信纸
。浏览器足够智能,可以在不含糊的情况下识别您的意思,并纠正它。因此,当您要求返回HTML时,您得到的是正确的值

如果你想要文本,那是另一回事。使用
.textContent
而不是
.innerHTML

如果您已经获取了HTML,并且希望剥离HTML标记并从中获取文本,则可以执行以下操作:

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

结果证明它相当简单。Text函数调用提供我要查找的文本

select.options[select.selectedIndex].text


结果证明它相当简单。Text函数调用提供我要查找的文本

select.options[select.selectedIndex].text


将替换与textContent而不是innerHTML一起使用:

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

将替换与textContent而不是innerHTML一起使用:

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

如果只想获取选定选项的文本。您可以使用
.textContent
而不是
.innerHTML


如果您只想获取所选选项的文本。您可以使用
.textContent
而不是
.innerHTML


将“&”替换为“&”?或者您的意思是将“&”替换为“&”?使用
decodeURIComponent(select.options[select.selectedIndex].innerHTML)
@Prabhuram没有work@Prabhuram:
decodeURIComponent
用于URI解码(顾名思义),而不是HTML实体解码。没有现成的函数可以实现这一点-您最好使用自定义的
replace
,或者创建一个HTML元素并读取其
textContent
。使用
select.options[select.selectedIndex]。text
将“&”替换为“&”?或者您的意思是将“&”替换为“&”?使用
decodeURIComponent(select.options[select.selectedIndex].innerHTML)
@Prabhuram没有work@Prabhuram:
decodeURIComponent
用于URI解码(顾名思义),而不是HTML实体解码。没有现成的函数可以实现这一点-最好是使用自定义的
replace
,或者创建一个HTML元素并读取其
textContent
。使用
select.options[select.selectedIndex]。text
编写
书籍和文具
不是错误,XHTML中除外。并且
&
这样存储在DOM中。正是对
innerHTML
的引用导致的序列化将其转换为
&。除了在XHTML中,编写
书籍和文具
不是错误。并且
&
这样存储在DOM中。正是对
innerHTML
的引用导致的序列化将其转换为
&
。这是最好的答案,因为所有浏览器都支持
text
属性。(IE 8及更早版本中不支持
textContent
属性。)这是最好的答案,因为所有浏览器都支持
text
属性。(IE 8及更早版本中不支持
textContent
属性。)