Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 寻找节点的疯狂想法_Javascript_Search_Dom - Fatal编程技术网

Javascript 寻找节点的疯狂想法

Javascript 寻找节点的疯狂想法,javascript,search,dom,Javascript,Search,Dom,我有一个疯狂的想法(但疯狂到可能会奏效),页面上的每一个元素都是用javascript创建的,但是给它一个ID,这个ID是它在DOM中的路径散列 因此,您不必在DOM中搜索元素,而是对路径进行散列,然后使用该散列getElementById() 这样做的问题是获取路径可能比首先搜索DOM更昂贵。你知道怎么做吗?或者这是很愚蠢的吗?我想问题是你想用它解决什么样的问题 对路径进行散列以通过唯一id获取元素很好,但是从哪里获取路径呢?这些将是相当长的“ID”,相当笨拙。或者,如果您使用硬编码、散列ID

我有一个疯狂的想法(但疯狂到可能会奏效),页面上的每一个元素都是用javascript创建的,但是给它一个ID,这个ID是它在DOM中的路径散列

因此,您不必在DOM中搜索元素,而是对路径进行散列,然后使用该散列
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,则元素的路径将更改,哈希不再工作


      如果你知道元素的完整路径,那么去那条路径真的很难证明这类事情是正确的吗?通常,通过与元素的绝对路径无关的公共方面收集元素是一件麻烦的事情。对于像这样的引擎,我不确定我是否看到了这个用例。:-)

      我还想知道,当移动元素时,您将如何处理它。重新分配他们的散列,可能会很快变得难看

      请注意,您的方法不仅适用于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);
      

      这是对预生成内容的一次性点击,而不必总是重新生成内容。不提倡,只是指出。

      如果你知道元素的完整路径,那么走这条路径真的足够难证明这类事情是正确的吗?通常,通过与元素的绝对路径无关的公共方面收集元素是一件麻烦的事情。对于像这样的引擎,我不确定我是否看到了这个用例。:-)

      我还想知道,当移动元素时,您将如何处理它。重新分配他们的散列,可能会很快变得难看

      请注意,您的方法不仅适用于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