.data()html5交叉窗口

时间:2015-03-06 20:42:36

标签: javascript jquery html5 cross-window-scripting

我试图将一些数据放入子窗口html标记中。但它似乎不起作用。我试着把它放在那个子窗口的一些jquery上,这很好。

以下是在父窗口中实现的将数据发送到子窗口的代码:

$(".something", fullscreen.document).data("data1", "whatever");

将返回" undefined"在子窗口中使用以下jQuery代码。

console.log($(".something").data("data1"));

但是当我使用子jQuery脚本存储数据时,它可以完美地运行:

$(".something").data("data1", "whatever");

不允许将十字窗口数据存储到标签中吗?

2 个答案:

答案 0 :(得分:1)

jQuery不会使用DOMElement保存数据,而是在范围内使用jQuery 实例。对于jQuery的两个实例,无论是在同一个文档(例如,jQuery的两个版本)还是在不同的文档中,都不会共享内部数据,也不能访问它。 / p>

您将始终需要使用与设置它相同的jQuery来检索数据。

如果要访问子数据中的数据,那么数据就是这样:

$(".something", fullscreen.document).data("data1", "whatever");

然后你需要这样做:

parent.window.$(".something", docmuent).data('data1');

答案 1 :(得分:1)

jQuery对您使用.data()设置的数据使用自己的数据存储。 jQuery的每个实例(在每个窗口中)都有自己独立的数据存储,因此当从另一个调用时,你不会从一个获得结果。

如果您的数据只是一个字符串,那么您可能会发现更容易不用担心多个实例数据存储,只需使用.attr()将字符串存储为DOM对象的实际属性。然后,关于存储位置或如何访问它的问题毫无疑问,因为它直接位于DOM对象上,您可以从jQuery实例轻松访问它。

// store data on the object
$(".something", fullscreen.document).attr("data-data1", "whatever");

// read data from within the target window
console.log($(".something").attr("data-data1"));

请注意使用HTML5 "data-xxx"约定来避免任何属性命名与标准属性冲突。