我想知道为什么这种方法:
window.location.hash = JSON.stringify($("body")[0]);
将某种 jquery-id 添加到哈希中。它看起来像这样:
foo.htm#{"jQuery18305139440292647334":13}
这个“id”是什么(怎么称呼?)有没有办法从这个id返回到DOM元素?页面重新加载后这个 id 是否一致?
我想知道为什么这种方法:
window.location.hash = JSON.stringify($("body")[0]);
将某种 jquery-id 添加到哈希中。它看起来像这样:
foo.htm#{"jQuery18305139440292647334":13}
这个“id”是什么(怎么称呼?)有没有办法从这个id返回到DOM元素?页面重新加载后这个 id 是否一致?
您的问题是它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);