如何打开所有jstree节点(父母和孩子)

Posted

技术标签:

【中文标题】如何打开所有jstree节点(父母和孩子)【英文标题】:How to open all jstree nodes (parents and children) 【发布时间】:2021-09-09 01:58:24 【问题描述】:

有一个 webpage 有 129 个父节点。 并且每个父节点有多个子节点到第四层(order>family>genus>specie)。

我想打开所有个节点。 我在这里看到了一些带有脚本的帖子。 但我不知道如何使用它。

注意:我的实际目的是复制所有嵌套格式的数据。

附注我不是网络开发者,这不是我的网站。

【问题讨论】:

【参考方案1】:

以下代码将递归扩展所有链接,然后使用树表示将其生成 JSON,然后将 JSON 复制到剪贴板中。

我为每棵树的扩展设置了 2 秒的超时时间,以便子树在网络请求之后出现,因此需要 2 秒 * 该页面中所有可用的树,因此您将不得不等待很长时间它需要很长时间才能完成,如果您的连接速度很快,您可以将超时时间减少到 1 秒以使其运行得更快。


function extractChilds(ulNode) 
  return [...ulNode.childNodes].map(node => 
    let data = 
      title: node.querySelector('a')?.innerText?.trim()
    
    let child = node.querySelector('ul');
    if(child) 
      data.childrens = extractChilds(child);
    
    return data;
  );


async function main() 
  let done = false;

  while(!done) 
    for(const e of [...document.querySelectorAll('.jstree-closed')]) 
      await new Promise(r => setTimeout(r, 2000))
      e.querySelector('ins').click()
    
    if(document.querySelectorAll('.jstree-closed').length === 0) done = true;
  
  console.log('expanded all of the trees')
  return extractChilds(document.querySelector("#classification > ul"));


main().then(copy);

【讨论】:

这正是我想要的!但是,我该如何使用它?我只是将它粘贴到控制台选项卡中并执行吗?因为它给了我“Uncaught SyntaxError: Unexpected identifier” 是的,您只需将其粘贴到控制台中,我尝试使用我的 chrome 浏览器并没有遇到该错误,在错误结束时,它会给您一个行号.让我知道浏览器和行号,以便我查看。 我又复查了一遍。从手机复制到 PC 时,不知何故我弄乱了脚本。现在就像一个魅力。非常感谢!

以上是关于如何打开所有jstree节点(父母和孩子)的主要内容,如果未能解决你的问题,请参考以下文章

jsTree:如何从 jstree 获取所有叶节点?

延迟加载 JSTREE

jsTree:如何从 jstree 获取所有节点?

如何仅使用 CSS 使孩子自动适应父母的宽度?

JSTree 选择打开节点

jstree 如何获得选中节点的值?