如何在node.js中的大对象中找到特定值?

时间:2011-10-26 13:12:25

标签: html parsing node.js

实际上我使用htmlparser解析了一个网站,我想在解析的对象中找到一个特定的值,例如字符串“$ 199”,并继续跟踪该元素(通过定期解析)到看到价值仍然是“199美元”或已经改变。

在用眼睛进行一些痛苦的愚蠢搜索之后,我发现该字符串位于这样的某个地方:

price = handler.dom[3].children[3].children[3].children[5].children[1].
        children[3].children[3].children[5].children[0].children[0].raw;

所以我想知道是否有方法不那么痛苦?谢谢!

1 个答案:

答案 0 :(得分:0)

基于树的递归搜索可能最容易获得您感兴趣的节点。

我没有使用htmlparser,文档看起来有点薄,所以这只是一个让你入门并未经过测试的例子:

function getElement(el,val) {
    if (el.children && el.children.length > 0) {
        for (var i = 0, l = el.children.length; i<l; i++) {
            var r = getElement(el.children[i],val);
            if (r) return r;
        }
    } else {
        if (el.raw == val) {
            return el;
        }
    }
    return null;
}

调用getElement(handler.dom[3],'$199'),它会递归遍历所有子项,直到找到没有children的元素,然后将其原始值与'$ 199'进行比较。请注意,这是一个直接的比较,您可能想要将其替换为正则表达式或类似的?