在JavaScript中无法比较两个字符串

3
我有以下函数,应该根据标题的文本返回不同的值:
function getPage(){
  var page;
  var headText = $.trim($('h1').text());

if(headText=="Page 1"){
    page= 'a';
}else if(headText=="Page 2"){
    page= 'b';
}else if(headText=="Page 3"){
    page ='c';
}else if(headText=="Page 4"){
    page= 'd';
}else{
    page= 'ERROR';
}

return page;
}

很遗憾,该函数只返回"ERROR"。我已经尝试过不使用trim方法。我尝试将页面1到4的文本分别写入变量中,并在if()部分比较两个变量。但是没有成功。我的错误在哪里呢? (我确定

元素的文本为"Page 1"、"Page 2"、"Page 3"或"Page 4")


3
我肯定<h1>元素的文本是... 这似乎不是事实 ;) - Felix Kling
1
首先检查headText是否包含您期望的值。 - Sirko
1
最简单的解决方法是在代码中加入 console.log 并查看输入与您的期望有何不同(这就是调试的精髓 - 记录 所有 东西)。 - Joe Clay
@Liam 这里可能出了什么问题??? - A. Wolff
使用 switch 怎么样? - Mir
你的代码是可以运行的,问题出在其他地方... - sinisake
2个回答

1

如果在您的页面上只有一个h1标签,则您的代码可以正常工作。如果有多个h1标签,则它们的文本将被连接在headText中。

您应该使用id属性唯一地标识您的h1标签,以仅获取该标签的文本。


这是正确的,但并没有解释为什么它不起作用:“我已经尝试将页面1到页面4分别写入变量中,并比较两个变量”。 - A. Wolff
当然可以。它不能正常工作是因为$('h1')选择了所有的h1标签,当你调用$('h1').text()时,它们所有的文本都被连接在一起了。请参见:https://plnkr.co/edit/vOYnZohkjTEu4q634JUV - ethan
但是OP说他已经测试过将文本设置为变量,但仍然无法工作。所以显然问题出在其他地方。 - A. Wolff

1

首先,使用console.log(headText);查看实际获取的内容。

你可能会得到h1子元素的文本添加到h1文本中的情况 - 参见http://api.jquery.com/text/,特别是:

获取匹配元素集合中每个元素的合并文本内容,包括它们的后代。[强调我的]

如果是这种情况,请参见this question and answer以获得解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接