【问题标题】:Searching for a letter in a word in javascript在javascript中搜索单词中的字母
【发布时间】:2013-07-22 15:09:18
【问题描述】:

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

我写的代码是:

    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")
     }
    }

变量“字母”是一个全局变量,根据点击的内容被赋予一个值:

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

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

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

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

非常感谢任何输入,

谢谢

【问题讨论】:

  • 变量letterchosenWord未在searchLetter()函数中定义。
  • @VisioN 根据问题,它显然是全球性的。查看 HTML 会很有帮助。字母取自某个<a>标签的文本内容,每次都一样。
  • 你有没有想过使用正则表达式?
  • A &nbsp B &nbsp
  • @Misemefein 您是否尝试过单步执行您的代码以查看最终在 aChosenWord 和 aLetter 中的值?

标签: javascript jquery string search


【解决方案1】:

虽然我不提倡不必要的全局变量,但下面的代码应该可以满足您的需求。

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

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

    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")
       }
    }
    

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

    【讨论】:

    • 嗨,Jack,谢谢你——我是 jQuery 的新手,所以仍然对这一切有所了解。原始问题已解决(我的 html 文件中的一些空格,doh!)。但这绝对有助于整理我的代码。再次感谢。
    【解决方案3】:

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

    var letter = ''
    

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

    【讨论】:

    • window 上定义全局变量可能会更好,以防意外限制范围(最好尽可能避免使用全局变量)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多