如何使用带符号的lastIndexOf()函数

时间:2018-02-17 13:12:07

标签: javascript html character-encoding

刚开始使用 self.widthConstraint.priority = 250 self.layoutIfNeeded() indexOf()函数,我知道它们的使用原因,但结果并不让我感到高兴:)

lastIndexOf()
let str = $('#info').html();

// WORKS
//alert(str.lastIndexOf('√'));

// DOESN'T WORK
alert(str.lastIndexOf('√'));

问题是我将警报结果设为“-1”,这意味着在<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="info">&#x0221A;</div>变量中找不到&#x0221A;。使用简单的符号str,但是,我不确定在这里使用此符号是否是一个好习惯。

在我看来,关于此问题的另一种方法是将HTML中的符号编码为,因此使用“Inspect element”功能可以看到&#x0221A;

您怎么看?

2 个答案:

答案 0 :(得分:3)

没有直接的方法来实现这一目标。但是如果你仍然想这样做,那么你只需要创建一个ASCII值的HEX值:

&#13;
&#13;
let str = ascii_to_hexa($('#info').html());
str = '&#x0'+str.toUpperCase()+';';

alert(str.lastIndexOf('&#x0221A;'));

function ascii_to_hexa(str)
{
  var arr1 = [];
  for (var n = 0, l = str.length; n < l; n ++){
    var hex = Number(str.charCodeAt(n)).toString(16);
    arr1.push(hex);
  }
  return arr1.join('');
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="info">&#x0221A;</div>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

当浏览器读取并解析您的HTML时,它会构建一个DOM, 保留您提供的确切HTML。稍后,如果您要求HTML,它会使用自己的规则构建一个新的HTML字符串。

这就是为什么str.lastIndexOf('&#x0221A;')不起作用的原因:浏览器没有义务按照您提供时使用的相同形式退回角色。它可以将其作为一个字符()或一个命名字符引用(&radic; in this case)或十进制数字字符引用(&#8730;)而不是您正在寻找的十六进制数字字符引用。

您必须在目标浏览器上进行测试才能看到他们为您提供的内容,然后进行查找。我怀疑大多数(如果不是全部)都会返回实际角色,因此str.lastIndexOf('√')(或str.lastIndexOf('\u221A'))将是您的最佳选择。

&#13;
&#13;
<div>&radic;</div>
&#13;
&#13;
&#13;