SHINGU 发表于 2023-2-11 16:45:47

关于zTree使用的问题

原本以为是个很简单的事情,但研究了一天也没有解决。

首先,同样的代码,在开发者工具的控制台中运行是正常的,但放到油猴中,脚本执行就有问题了。

我的具体需求是变动zTree构造的树状结构中节点的位置。代码如下:

```
let obj_1 = $.fn.zTree.getZTreeObj("orgTree").getNodeByTId("1");
let obj_2 = $.fn.zTree.getZTreeObj("orgTree").getNodeByTId("2");
$.fn.zTree.getZTreeObj("orgTree").moveNode(obj_1,obj_2,"prev");
```

这段脚本我是放在`$(document).ready(function() {....});`,考虑的是要等页面加载完再去执行我的操作。

错误提示:

`jQuery.Deferred exception: Cannot read properties of null (reading 'getNodeByTId') TypeError: Cannot read properties of null (reading 'getNodeByTId')`

因为在控制台是能正常执行的,所以我初步怀疑是油猴脚本是没法调用相应的方法。于是我用`//@require`把相应的js文件引入进来。可还是不行。

从表象上来看,`#orgTree`对应的树对象获取不到,但我调用的时候树肯定已经生成了。

由于我针对的网站是内网系统,无法展示。只知道使用的zTree是一个jQuery插件,相关API在这里:(https://treejs.cn/v3/api.php)

李恒道 发表于 2023-2-11 16:58:33

页面加载完不代表元素会渲染的
可以在触发之前打个debugger断点追一下

wwwwwllllk 发表于 2023-2-11 17:26:50

所以我感觉加个setTimeout是不是就会好了

wwwwwllllk 发表于 2023-2-11 17:27:29

一般在控制台没问题,在脚本里面有问题,应该就是在页面没有加载完成就执行了脚本的内容了

SHINGU 发表于 2023-2-11 18:29:48

wwwwwllllk 发表于 2023-2-11 17:26
所以我感觉加个setTimeout是不是就会好了

这个我也试过。也是报错的。

SHINGU 发表于 2023-2-11 19:11:16

有没有可能跟js文件的执行顺序有关?不知道油猴里的脚本一般放在什么时候去执行的?

SHINGU 发表于 2023-2-11 19:57:51

大概知道问题了。

我之前用的是$(document).ready

改成window.onload = function()

这两个不是一样的吗?
页: [1]
查看完整版本: 关于zTree使用的问题