0

我想知道为什么这种方法:

window.location.hash = JSON.stringify($("body")[0]);

将某种 jquery-id 添加到哈希中。它看起来像这样:

foo.htm#{"jQuery18305139440292647334":13}

这个“id”是什么(怎么称呼?)有没有办法从这个id返回到DOM元素?页面重新加载后这个 id 是否一致?

4

1 回答 1

1

您的问题是它JSON.stringify()不适合序列化 DOM 元素或任何其他循环结构(如 jQuery 对象)。

除此之外,JSON.stringify()是浏览器特有的功能。您显然在 Firefox 中测试了您的代码,因为如果您尝试在 chrome 中执行相同操作,您将不会得到任何输出。

您可能会在此处找到更多有用的信息:即使存在循环引用,如何将 DOM 节点序列化为 JSON?

至于为什么你得到随机数的问题,如果你问我,那只是一些 Firefox 的幕后魔术。要点是,您尝试做的事情不受支持或记录在案,并且可能总是会产生意想不到的结果。

我也不确定您要做什么,但是如果您打算从 URL 的井号标签中引用特定的 DOM 元素,请考虑添加 jQuery 选择器。

window.location.hash = encodeURIComponent('body:first');
// wil result in URL like: http://foo.htm#body%3Afirst

然后在页面加载哈希后,您可以像这样检索元素:

var myjQueryObject = $(window.location.hash);
于 2013-04-19T14:25:20.607 回答