javascript函数indexOf()不能在chrome中使用字符串中的空格

时间:2011-12-20 07:52:06

标签: javascript

我想在锚标签中搜索字符串,当我只搜索没有空格的“快乐”时它工作正常但是当我用“快乐”这样的空间搜索它时它不起作用。

以下是代码示例:

<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>

4 个答案:

答案 0 :(得分:2)

因为作为URL的href获得了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 "));  
}  

答案 1 :(得分:0)

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

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

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

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

然后它运作正常。

也许您可能想要考虑对搜索字符串进行网址编码,类似于浏览器在toString()中执行此操作的方式:

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

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

将这些内容发布为您的问题的编辑是值得的。

答案 2 :(得分:0)

使用正则表达式匹配字符串 查看以下URL将有所帮助: http://www.tizag.com/javascriptT/javascript-string-replace.php

答案 3 :(得分:0)

从链接href属性检索时,空格将被编码为“%20”。 尝试以下内容:

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