3

我使用了“Google AJAX Transliteration API”,它对我来说很顺利。

http://code.google.com/apis/ajaxlanguage/documentation/referenceTransliteration.html

目前我有一个项目,我需要每个页面中的所有输入字段(输入和文本区域标签)都是可音译的,而这些输入字段因页面而异(动态)。据我所知,我必须在 API 调用中调用 makeTransliteratable(elementIds, opt_options) 方法来定义哪些输入字段可以进行音译,在我的情况下,我无法手动预定义这些字段。有没有办法做到这一点?

提前致谢

4

1 回答 1

4

重新表述您的要求:您希望将页面上符合特定条件的所有输入收集在一起,然后将它们传递给 api。

快速浏览一下 API 参考,makeTransliteratable 将接受一个 id 字符串数组或一个元素数组。由于我们事先不知道元素的 id,我们将传递一个元素数组。

那么,如何获取元素数组呢?

我将向您展示两种方法:一种困难的方法和一种简单的方法。

首先,要获取所有文本区域,我们可以使用 document.getElementsByTagName API:

var textareas = document.getElementsByTagName("textarea");

获取输入列表稍微困难一些,因为我们不想包含复选框、单选按钮等。我们可以通过它们的类型属性来区分它们,所以让我们编写一个快速函数来进行区分:

function selectElementsWithTypeAttribute(elements, type)
{
    var results = [];
    for (var i = 0; i < elements.length; i++)
    {
        if (elements[i].getAttribute("type") == type)
        {
            results.push(elements[i]);
        }
    }
    return results;
}

现在我们可以使用这个函数来获取输入,如下所示:

var inputs = document.getElementsByTagName("input")
var textInputs = selectElementsWithTypeAttribute(textInputs, "text");

现在我们已经引用了所有文本框,我们可以将它们连接到一个数组中,并将其传递给 api:

var allTextBoxes = [].concat(textareas).concat(textInputs);
makeTransliteratable(allTextBoxes, /* options here */);

所以,这一切都应该有效,但我们可以通过明智地使用库方法来使其更容易。如果您要下载 jQuery(google it),那么您可以编写更紧凑的代码:

var allTextBoxes = $("input[type='text'], textarea").toArray();
makeTransliteratable(allTextBoxes, /* options here */);

这使用 CSS 选择器来查找类型属性为“text”的所有输入以及所有文本区域。有一个方便的 toArray 方法,它将所有输入放入一个数组中,准备传递给 makeTransliteratable。

我希望这有帮助,道格拉斯

于 2010-04-18T10:15:42.287 回答