如何比较包含十六进制字符引用的innerHTML?

4

我有一个包含▼(在渲染后的页面上显示为▼)的标签:

<span id=up_down>&#x25bc;</span>

问题在于,当我尝试将 innerHTML 与 &#x25bc ; 进行比较时,

它实际上是在尝试比较 ▼ 是否等于 &#x25bc ; (并且失败了)。

var e = document.getElementById("up_down");
if ( e.innerHTML == '&#x25b2;' )
{
  e.innerHTML = '&#x25bc;';
}
else if ( e.innerHTML == '&#x25bc;' )
{
  e.innerHTML = '&#x25b2;';
}

修改 HTML 是一种不好的做法。应该使用 CSS 类来代替。 - katspaugh
我对了解更多关于你所说的内容很感兴趣。你能指向一些我可以查看的东西吗?谢谢! - harmonic
根据您所处的状态,向元素添加/删除类。http://jsfiddle.net/JXuT4/ - katspaugh
1
谢谢@katspaugh,我使用背景图片实现了类切换方法,并在此过程中学到了一些东西! - harmonic
3个回答

5

尝试使用escape()进行转义,然后使用%u25BC%u25B2代替。

var e = document.getElementById("up_down");
if ( escape(e.innerHTML) == '%u25B2' )
{
  e.innerHTML = '&#x25bc;';
}
else if ( escape(e.innerHTML) == '%u25BC' )
{
  e.innerHTML = '&#x25b2;';
}​

demo


1

尝试比较字符代码:

if(e.textContent.charCodeA(0) == 0x25bc) {
  // Your code
}

现在你正在将实际字符与包含其HTML实体表示的字符串进行比较。


0
尝试像这样做:

var upArrow = String.fromCharCode('0x25b2');
var downArrow = String.fromCharCode('0x25bc');

if ( e.innerHTML == upArrow )
{
  e.innerHTML = downArrow;
}
else if ( e.innerHTML == downArrow )
{
  e.innerHTML = upArrow;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接