elem未定义?

时间:2012-06-17 00:04:32

标签: javascript dom element getelementsbytagname

当我运行以下代码时,firebug控制台说elem是未定义的,虽然......它不是!

var domTools = {};
domTools.searchInElements = function (elem, pattern) {
    if (pattern.constructor !== RegExp) {
        throw "Pattern must be a RegExp";
    }
    if (elem.constructor !== String) {
        throw "Element must be a String";
    }
    elem = document.getElementsByTagName[elem];
    var matches = [];
    for (e = 0; e < elem.length; e++) {
        if (pattern.test(elem[e].innerHTML)) {
            matches.push(elem[e]);
        }
    }
    return matches;
}
domTools.searchInElements("p", /hello/);

它在for语句中给出了错误。所有这些代码都在页面已经加载时运行。为什么会这样?

2 个答案:

答案 0 :(得分:4)

它是()而不是[]

elem = document.getElementsByTagName(elem);

getElementsByTagnName()视为函数调用,这样您就不会忘记它使用()。不要忘记使用开发人员控制台 F12 来发现这些问题。

答案 1 :(得分:3)

由于Joseph the Dreamer已使用document.getElementsByTagName[elem]代替document.getElementsByTagName(elem),因此here已找到导致错误的错误。

但是此次调用domTools.searchInElements("p", /hello/);可能会遇到另一个问题,因为它会与hello, helloo, hellos etc匹配,因此您应该使用

domTools.searchInElements("p", /^hello$/)

或者只是另一个想法{{3}}。