Javascript 将字典合并到HTML系统中以确保单词存在

Javascript 将字典合并到HTML系统中以确保单词存在,javascript,html,dictionary,Javascript,Html,Dictionary,我对此束手无策,我目前正试图将一本字典合并到我的HTML系统中,以检查一个单词是否真实。我目前有一个“words.txt”文档,我正在使用它作为字典。我记得学习过一种方法,它允许你在文档中搜索一个单词,但却找不到任何关于它的信息,并打算用它来检查一个单词是否存在。目前,我对找到这个词需要多长时间没有疑虑,只是它是否能找到它 因此,目前我打算让用户使用一个文本框,输入一个单词,这个单词将与字典交叉引用,如果找到这个单词,它会提醒用户这个单词存在。我只是不知道怎么做 然而,如果有更好或更简单的方法来

我对此束手无策,我目前正试图将一本字典合并到我的HTML系统中,以检查一个单词是否真实。我目前有一个“words.txt”文档,我正在使用它作为字典。我记得学习过一种方法,它允许你在文档中搜索一个单词,但却找不到任何关于它的信息,并打算用它来检查一个单词是否存在。目前,我对找到这个词需要多长时间没有疑虑,只是它是否能找到它

因此,目前我打算让用户使用一个文本框,输入一个单词,这个单词将与字典交叉引用,如果找到这个单词,它会提醒用户这个单词存在。我只是不知道怎么做

然而,如果有更好或更简单的方法来做这件事,那么我将非常感谢你的投入


提前谢谢。我很乐意指定任何其他内容。

trie数据结构适合作为字典。trie是按每个字母排序的单词树。这里有一个很好的解释,但是对于PHP:。

您可以使用
xmlhttprequest
加载字典文件,一旦加载,将其转储到数组中。然后,每次打开一个键(或者无论您如何检查单词的拼写),都可以调用一个函数将单词与词典中的单词进行比较

这里有一种方法:

HTML:


Javascript:

//A large array of dictionary words
var dictionary = new Array();




//First, let's load up the dictionary
address = "words.txt";


//Create an XMLHTTPRequest object
var req = (window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");
if(req == null) {
    console.log("Error: XMLHttpRequest failed to initiate.");
}

//When it loads, add all the elements to the dictionary array
req.onload = function() {

    dictionary = req.responseText.split("\n");


    //Convert all the characters to lowercase. That way, multi-case strings are allowed.
    for(var i = 0; i < dictionary.length; i++)
        dictionary[i] = dictionary[i].toLowerCase();



}
try {

    req.open("GET", address, true);
    req.send(null);

} catch(e) {
    console.log("Oh snap");
}









//This function is called every time a key is released
function check(element) {

    var allWords = element.value.split(" ");


    for(var i = 0; i < allWords.length; i++) {


        if(dictionary.indexOf(allWords[i].toLowerCase()) == -1) {
            element.style.backgroundColor = "#FFF";
            return;
        }

    }

    element.style.backgroundColor = "#0F0";

}
//大量字典单词
var dictionary=新数组();
//首先,让我们把字典装上去
address=“words.txt”;
//创建XMLHTTPRequest对象
var req=(window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject(“Microsoft.XMLHTTP”);
if(req==null){
log(“错误:XMLHttpRequest未能启动。”);
}
//加载时,将所有元素添加到字典数组中
req.onload=函数(){
dictionary=req.responseText.split(“\n”);
//将所有字符转换为小写。这样,就允许使用多大小写字符串。
for(var i=0;i

编辑:修改代码以适用于文本区域

@JeffreySweeny:多个相同的单词如何?@David如果我理解你的意思,它仍然有效。如果字典中根本不存在该单词,
indexOf
函数将返回-1。如果用户键入“apples”,这仍然有效。然而,这段代码并非没有问题,例如双空格和新行。这很容易修复,但是这个示例可能不需要额外的代码。这太棒了!因此,如果我正确地阅读了这篇文章,我只需要创建一个html文本框并将此JavaScript连接到它,它应该可以工作吗?就本例中使用的词典“words.txt”而言,我需要在每个单词之间使用分隔符,因为目前我的“words.txt”基本上是一个很长的单词,因为它不包括spaces@Joel.Conway您需要一个分隔符,但它不需要是新行(\n)。再说一次,这段代码并不完美,但它能让你开始。@JeffreySweeney非常感谢你,说实话,我一直很紧张,这对我开始工作有很大帮助。这个系统运行良好,但是从我从这篇文章中收集到的信息来看,我需要单独输入每个单词,而我已经可以访问字典文件,我是否可以简单地通过我的文件查找输入的单词?@Joel.Conway:这是关于使用树并进行快速查找。如果这是一个新手问题,你怎么能推荐这么复杂的机械师?当您理解trie时,它会更简单,但需要付出更多的努力。我相信你可以找到一些JS trie.@Joel.Conway,这取决于你的目标受众,实现David发布的一些优化技术肯定是有益的;用我的代码,一个十岁的砖匠会很明显地在字典列表中搜索。@JeffreySweeney:不仅如此,如果你在线存储,你可以有很多并行用户。无论如何,哈希映射也很好。我不知道你已经有字典了。我的道歉。
//A large array of dictionary words
var dictionary = new Array();




//First, let's load up the dictionary
address = "words.txt";


//Create an XMLHTTPRequest object
var req = (window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");
if(req == null) {
    console.log("Error: XMLHttpRequest failed to initiate.");
}

//When it loads, add all the elements to the dictionary array
req.onload = function() {

    dictionary = req.responseText.split("\n");


    //Convert all the characters to lowercase. That way, multi-case strings are allowed.
    for(var i = 0; i < dictionary.length; i++)
        dictionary[i] = dictionary[i].toLowerCase();



}
try {

    req.open("GET", address, true);
    req.send(null);

} catch(e) {
    console.log("Oh snap");
}









//This function is called every time a key is released
function check(element) {

    var allWords = element.value.split(" ");


    for(var i = 0; i < allWords.length; i++) {


        if(dictionary.indexOf(allWords[i].toLowerCase()) == -1) {
            element.style.backgroundColor = "#FFF";
            return;
        }

    }

    element.style.backgroundColor = "#0F0";

}