我正在为一个简单的javascript代码进行练习,但出于某种原因,它无法正常工作。
<!DOCTYPE html>
<html>
<head>
<script>
var str,len,toS,first,last,output;
function handling() {
str = document.getElementById("box").value;
len = str.len;
toS = str.indexOf(" ");
first = str.substr(0,toS);
last = str.substr(toS+1,len-toS-1);
output = "Hello Mr."+str+"<br>"+"Your first name is "+first+"<br>"+"Your last name is "+last+"<br>";
document.getElementById("para").innerHTML=output;
}
</script>
</head>
<body>
<p>Enter your full name</p>
<textarea rows="20" cols="20" id="box"></textarea>
<button onclick="handling();">Press button</button>
<p id="para"></p>
</body>
</html>
输入:James Smith
输出结果为:
你好詹姆斯史密斯先生
你的名字是詹姆斯
您的姓氏是
没有正确显示姓氏。我不断重新检查代码,我不认为我犯了错误。那么为什么不输出姓氏呢?
答案 0 :(得分:0)
更改此
last=str.substr(toS+1,len-toS-1);
到这个
last=str.substr(toS+1,len);
<强>更新强>
以上解决方案不是最好的 - 在您评论后我检查definition of substr并且它的第二个参数是字符数(我把总字符串长度视为可接受,但对于js纯粹主义者来说不是100%可满足)。所以te问题就行了
len = str.len;
@tevemadar 在他的回答中提到。因此,在代码len = str.len = null
中,您获得len-toS-1 = 0-toS-1 < 0
(因此减去零个字符以进行减法 - 这意味着last=""
作为结果)。所以它应该是
len = str.length
答案 1 :(得分:0)
我认为使用String.prototype.split()更好更短:
let str = "john smith";
str = str.split(" ");//<-- returns an array object
let first = str[0];
let last = str[1];
console.log(first);
console.log(last);
&#13;
请记住这一点,这些解决方案仅在输入只有两个单词时才有效。
答案 2 :(得分:0)
var str = "Hello Mr.{0} {1}<br>Your first name is {0}<br>Your last name is {1}<br>";
var fullname = "Walter Chapilliquen";
var output = str.replace(/\{(\d+)\}/g, function(a, i){
return fullname.split(" ")[i]
});
document.write(output);
&#13;
答案 3 :(得分:0)