日期:2014-05-18  浏览次数:20449 次

JS 怪问题 仁兄救命
<script>document.write(f1('C8H16N4O3'))</script> //得到正确结果

<script>document.write(rf1('C8H16N4O3'))</script> //得到空值


function f1(str)
{  
  var s2=str.match(/[A-Za-z]+\d+[A-Za-z]+/);
  //s2同样可以得到"C8H"(左右无空格)可得不到正确结果,如果直接赋值则可以(s2="C8H")
  var s1=ref1(s2);
  str=str.replace(s2,s1);
  return str;
}

function rf1(str)
{  
  var s1=ref1("C8H");
  str=str.replace("C8H",s1);
  return str;
}


function ref1(str)

  var allstr=""; 
  var st=str;
  for(var i=0;i<st.length;i++)
{  
alert("o"+st+"o");
  onechar= st.charAt(i);
alert("o"+onechar+"o");
  if (onechar.match(/\d/))
{
allstr+="<sub>"+onechar+"</sub>";

}else
{  
allstr+=onechar;
}

return allstr;
}

</script>

------解决方案--------------------
因为你用的是
document.write(rf1( 'C8H16N4O3 '))

TRY
alert(rf1( 'C8H16N4O3 ')) 肯定有值
------解决方案--------------------
onechar= st.charAt(i);
将这句改成
onechar= st.toString().charAt(i);