Javascript疯狂的想法找到一个节点

时间:2010-04-18 10:36:17

标签: javascript search dom

我有一个疯狂的(但是很疯狂,它可能会工作)想法,页面上的每个元素都是在javascript中创建的,但是给出了一个ID,它是DOM中路径的哈希值。

因此,不是搜索DOM来查找元素,而是使用该哈希对路径进行哈希,然后getElementById()

问题在于,获取路径可能比首先搜索DOM更昂贵。任何想法如何做到这一点,或者它是否只是愚蠢的?

5 个答案:

答案 0 :(得分:2)

如果您知道该元素的完整路径,那么该路径实际上是否足够难以证明这种事情的合理性?通常情况下,通过与其绝对路径无关的常见方面收集元素是一件麻烦事。有了像Sizzle这样的引擎,我不确定我是否看到了这个用例。 : - )

我也想知道如何在移动元素时处理它。大概重新分配它们的哈希值,这些哈希值开始变得难看。

请注意,您的方法不能使用Javascript在运行时创建的元素;您可以使用递归下降函数轻松地在事后分配它们:

function createIDs(element) {
    var child;

    if (!element.id) {
        element.id = createElementID(element);
    }
    for (child = element.firstChild; child; child = child.nextSibling) {
        if (child.nodeType == 1) { // Element
            createIDs(child);
        }
    }
}

// Kick things off
createIDs(document.body);

这是预先生成内容的一次性命中,而不是总是必须重新生成内容。不提倡,只是指出。

答案 1 :(得分:1)

“页面上的每个元素都是在javascript中创建的”

有你的问题。现在,您可以在客户端的PC上动态创建页面,而不是提供已创建的页面。他们必须为每一页都这样做。有些东西告诉我,这将否定你通过哈希想法查找的任何积极影响。

答案 2 :(得分:1)

听起来你正在重新发明像jQuery这样的javascript框架。

你可以将html片段插入到DOM中并将这些引用作为函数指针保存,或者在插入它们时简单地为每个元素分配一个唯一的id,然后它们会重新查询id(这非常快)。

答案 3 :(得分:1)

我发现了两个主要问题:

  • 由于页面是在客户端动态创建的,因此搜索引擎机器人只会获得一个空页。

  • 如果页面中有任何其他脚本更改DOM,则元素的路径会发生变化,并且散列不再起作用。

答案 4 :(得分:0)

我想问题是你试图解决的是什么问题。

散列通过唯一ID获取元素的路径很不错,但是从哪里获取路径?这些将是相当长的“ids”,而且相当笨拙。或者,如果您使用硬编码的散列ID,则会大大模糊您自己的代码。如果您只是稍微重新构建文档,那么每个路径都会发生变化。实际上,用Javascript编写整个网站听起来很疯狂。 :)

总的来说,这听起来不值得麻烦。在任何现代JS框架中,使用CSS样式选择器的元素查找通常不是瓶颈,但它更容易开发。如果你正在编写原始JS,那可能会有所不同,但是我认为你不应该这样做,除非你有一个自虐的连胜。 ;)