在javascript中搜索单词中的字母

时间:2013-07-22 15:09:18

标签: javascript jquery string search

我正在制作一个刽子手游戏,我正在编写一个函数来搜索单词中的一个字母。因此,当用户点击一封信时,我会抓住那里的文字并在所选单词中搜索它。

我写的代码是:

    function searchLetter()
    {
     var aLetter = letter.toLowerCase();
     var aChosenWord = chosenWord.toLowerCase(); 
     //chosenWord is a global variable initialised in another function
     if(aChosenWord.indexOf(aLetter) != -1) 
     alert("Letter is there")
     else 
     {
         alert("Letter not found")
     }
    }

变量'letter'是一个全局变量,并根据点击的内容给出一个值:

    $(function(){
  $('a').click(function () {
      letter = $(this).text();
    $(this).slideUp();
    searchLetter()
});
    });

我不确定我在这里做错了什么。我放了一堆警告框,我的代码似乎正确地抓住了字母。

但是当我运行它时,每次我为indexOf得到-1的值;即在单词中找不到该字母。

我无法弄清楚它在这里做错了什么!!

非常感谢任何输入,

由于

3 个答案:

答案 0 :(得分:0)

最好为全局变量创建一个上下文,例如:

jQuery(function($) {
    var chosenWord;

    $('a').click(function() {
        var $this = $(this);

        $this.slideUp();
        searchLetter($this.text(), chosenWord);
    });

    // link that generates new game?
    $('.generate-new-word').function() {
        chosenWord = generateNewWord();
    });
});

searchLetter()函数接收字母和单词作为其参数,因此与此代码分离。

我还写了一个如何集成单词生成功能的例子。与searchLetter()一样,此函数不了解任何全局状态。

这将是您searchLetter()

的实施
function searchLetter(letter, chosenWord)
{
   var aLetter = letter.toLowerCase();
   var aChosenWord = chosenWord.toLowerCase(); 

   if(aChosenWord.indexOf(aLetter) != -1) {
      alert("Letter is there")
   } else {
      alert("Letter not found")
   }
}

以这种方式组织代码可以减少在代码中引入错误的可能性,因为上下文仅在代码的一小部分内部进行管理。

答案 1 :(得分:0)

虽然我不是不必要的全球变量的倡导者,但下面的代码应该做你需要的。

<强> HTML

<span id="chosenWord">Some awesome word</span>
<br />
<a href="#" class="letter">a</a>
<a href="#" class="letter">b</a>
<a href="#" class="letter">d</a>
<a href="#" class="letter">e</a>

<强> JS

var letter,
    chosenWord = document.getElementById('chosenWord');
$('a').on('click', function () {
    if (chosenWord.innerHTML.toLowerCase().indexOf($(this).text().toLowerCase()) !== -1) {
        console.log('Found ' + $(this).text())
    } else {
        console.log($(this).text() + ' not found.');
    }
});

JSFiddle demo

答案 2 :(得分:-1)

你用全局变量声明了吗? (检查范围):

var letter = ''

为什么不更喜欢在搜索功能的参数列表中传递变量?