找到我创建的以下父子树对象。我需要找到给定子 ID 的根父级。例如,子 ID - 242 根父 ID 为 238。也有人提出了类似的问题,这是我发现与我的问题非常相似的问题。
我对原始代码做了一些更改,但不适用于子元素。问题就在这里。当它到来时,带有 for 循环的递归函数rootNode.children将不会执行,因为它不循环子级。但是,如果我将 for 循环更改 for (var i = 0; i < rootNode.length; i++) 为,for (var i = 0; i < rootNode.children.length; i++)那么它会在第一个循环上中断,因为没有子循环。我确信通过小的代码更改就可以工作。
var getParent = function (rootNode, rootId) {
if (rootNode.id === rootId)
return rootNode;
//for (var i = 0; i < rootNode.children.length; i++) -- original code line not working first time
for (var i = 0; i < rootNode.length; i++) {
var child …Run Code Online (Sandbox Code Playgroud)下面的代码用于在 chrome 中工作,但由于 chrome 最近的更改“在页面关闭中禁止同步 XHR”而突然停止。2019 年 4 月上旬的 Crome 最近更新,我认为 Chrome 73.0.3683.103 停止了此功能,他们建议使用 sendBeacon 或 fetch keepalive。我将发布我尝试过的内容,以便这可能对其他人有所帮助。
https://www.chromestatus.com/feature/4664843055398912
$(window).on('beforeunload', function (e) {
//ajax call used work in Chrome
}
Run Code Online (Sandbox Code Playgroud)
https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload
我知道有几个相关帖子涉及相同的情况,但仍然找不到解决方案。我尝试了多种方法来进行服务器调用。
步骤1:
$(window).on('beforeunload', function (e) {
if (navigator.sendBeacon) {
navigator.sendBeacon('url', 'data');
} else {
$.ajax({
type: 'POST',
url: 'url',
data: null,
contentType: 'application/json;',
async: false
});
}
}
Run Code Online (Sandbox Code Playgroud)
由于内容类型 - application-json,这不起作用
第2步:
$(window).on('beforeunload', function (e) {
var data = { ajax_data: 22 };
var blob = new Blob([JSON.stringify(data)], {type …Run Code Online (Sandbox Code Playgroud)