javascript函数indexOf()不工作在chrome与空白的字符串

javascript function indexOf() not working in chrome with white space in string

本文关键字:chrome 空白 字符串 工作 indexOf 函数 javascript      更新时间:2023-09-26

我想在锚标记中搜索字符串,当我简单地搜索没有空间的"Happy"时,它工作得很好,但是当我搜索像"Happy"这样的空间时,它不起作用。

下面是代码示例:
<html>
<body>
 <a style="color:#555555" href="Happy coding!!">test</a>
<br/>
<script type="text/javascript">
var hrefTags = document.getElementsByTagName("a");
var bDayId = ""; 
var stringToSearch = "Happy coding!!";
    for(var hrefIndex=0; hrefIndex < hrefTags.length; hrefIndex ++){
bDayId = hrefTags.item(hrefIndex).href.toString(); 
document.write(bDayId+"<br/>");
document.write( bDayId.indexOf("Happy "));  
     }  
</script>
</body>
</html>

这是因为href作为URL被URL编码,空格变成了'%20'。带空格的Href是无效的Href,因此如果你想在Href属性中存储一些信息,请使用另一个属性。或者,如果您想读取和字符串比较href属性与空格,在正确的url解码后比较。http://jsfiddle.net/Sddv6/1/

var hrefTags = document.getElementsByTagName("a");
var bDayId = ""; 
var stringToSearch = "Happy coding!!";
for(var hrefIndex=0; hrefIndex < hrefTags.length; hrefIndex ++){
  bDayId = decodeURIComponent(hrefTags.item(hrefIndex).href);      
  document.write(bDayId);    
  document.write(bDayId+"<br/>");
  document.write( bDayId.indexOf("Happy "));  
}  

使用正则表达式匹配字符串看看下面的网址会有帮助:http://www.tizag.com/javascriptT/javascript-string-replace.php

从link href属性检索时,空格将被编码为"%20"。试试下面的内容:

bDayId = decodeURIComponent(hrefTags.item(hrefIndex).href.toString());

当我在Firefox中这样做时,我从toString()得到的字符串是:

file:///home/pax/Happy%20coding!!

如果这就是你所看到的,那么你当然无法在那里找到"Happy "。当我将搜索语句更改为:

document.write( bDayId.indexOf("Happy%20"));

那么它可以正常工作。

也许您可能想要考虑url编码搜索字符串类似于您的浏览器在toString():

document.write( bDayId.indexOf(encodeURIComponent("Happy ")));

当然,这是假设我对编码是正确的。您没有提供来自HTML的实际输出,因此有点难以分辨。