Javascript 寻找节点的疯狂想法
我有一个疯狂的想法(但疯狂到可能会奏效),页面上的每一个元素都是用javascript创建的,但是给它一个ID,这个ID是它在DOM中的路径散列 因此,您不必在DOM中搜索元素,而是对路径进行散列,然后使用该散列Javascript 寻找节点的疯狂想法,javascript,search,dom,Javascript,Search,Dom,我有一个疯狂的想法(但疯狂到可能会奏效),页面上的每一个元素都是用javascript创建的,但是给它一个ID,这个ID是它在DOM中的路径散列 因此,您不必在DOM中搜索元素,而是对路径进行散列,然后使用该散列getElementById() 这样做的问题是获取路径可能比首先搜索DOM更昂贵。你知道怎么做吗?或者这是很愚蠢的吗?我想问题是你想用它解决什么样的问题 对路径进行散列以通过唯一id获取元素很好,但是从哪里获取路径呢?这些将是相当长的“ID”,相当笨拙。或者,如果您使用硬编码、散列ID
getElementById()
这样做的问题是获取路径可能比首先搜索DOM更昂贵。你知道怎么做吗?或者这是很愚蠢的吗?我想问题是你想用它解决什么样的问题 对路径进行散列以通过唯一id获取元素很好,但是从哪里获取路径呢?这些将是相当长的“ID”,相当笨拙。或者,如果您使用硬编码、散列ID,则会使您自己的代码变得非常混乱。如果您只是稍微重新构造文档,那么每个路径和每个id都将发生变化。事实上,用Javascript编写整个网站听起来很疯狂
总的来说,听起来不值得这么麻烦。在任何现代JS框架中,使用CSS样式选择器查找元素通常不是一个瓶颈,但它更易于开发。如果你写的是原始JS,这可能会有所不同,但我认为你无论如何都不应该这么做,除非你有受虐癖倾向 我想问题是你想用它解决什么样的问题 对路径进行散列以通过唯一id获取元素很好,但是从哪里获取路径呢?这些将是相当长的“ID”,相当笨拙。或者,如果您使用硬编码、散列ID,则会使您自己的代码变得非常混乱。如果您只是稍微重新构造文档,那么每个路径和每个id都将发生变化。事实上,用Javascript编写整个网站听起来很疯狂 总的来说,听起来不值得这么麻烦。在任何现代JS框架中,使用CSS样式选择器查找元素通常不是一个瓶颈,但它更易于开发。如果你写的是原始JS,这可能会有所不同,但我认为你无论如何都不应该这么做,除非你有受虐癖倾向 “页面上的每个元素都是用javascript创建的” 这是你的问题。现在,您完全可以在客户端的PC上动态创建一个页面,而不是提供一个已经创建的页面。他们每一页都必须这样做。有人告诉我,这将否定通过哈希思想进行查找的任何积极效果。“页面上的每个元素都是用javascript创建的”
这是你的问题。现在,您完全可以在客户端的PC上动态创建一个页面,而不是提供一个已经创建的页面。他们每一页都必须这样做。有人告诉我,这将否定您通过哈希思想进行查找的任何积极影响。听起来您正在重新创建类似jQuery的javascript框架
您可以将html片段插入DOM并将这些引用保留为函数指针,或者在插入它们时为每个元素分配一个唯一的id,稍后它们会重新查询id(这非常快)。听起来像是在重新创建一个类似jQuery的javascript框架
您可以将html片段插入DOM并将这些引用保留为函数指针,或者在插入它们时为每个元素分配一个唯一的id,然后它们会在稍后重新查询id(这非常快)。我发现这有两个主要问题:
- 由于页面是在客户端动态创建的,搜索引擎机器人只会得到一个空页面
- 如果页面中有任何其他脚本更改DOM,则元素的路径将更改,哈希不再工作
- 由于页面是在客户端动态创建的,搜索引擎机器人只会得到一个空页面
- 如果页面中有任何其他脚本更改DOM,则元素的路径将更改,哈希不再工作
- 我认为这有两个主要问题:
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);
这是对预生成内容的一次性点击,而不必总是重新生成内容。不提倡,只是指出。如果你知道元素的完整路径,那么走这条路径真的足够难证明这类事情是正确的吗?通常,通过与元素的绝对路径无关的公共方面收集元素是一件麻烦的事情。对于像这样的引擎,我不确定我是否看到了这个用例。:-) 我还想知道,当移动元素时,您将如何处理它。重新分配他们的散列,可能会很快变得难看 请注意,您的方法不仅适用于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);
这是对预生成内容的一次性点击,而不必总是重新生成内容。不提倡,只是指出。关键是id是节点的路径。因此,如果您有一个路径,而不是搜索DOM来获取它,它已经作为散列id存在。如何处理路径比使用普通的旧
childNodes[n]
,parentNode
等更容易?首先查找元素不是一个问题吗?一旦找到元素,就可以保存r