代码之家  ›  专栏  ›  技术社区  ›  Mottie

从iframe元素访问jQuery数据

  •  8
  • Mottie  · 技术社区  · 14 年前

    同一域 我把它放进了一个iframe。在iframe中,我向元素添加了数据,如下所示:

    HTML格式

    <div id="data"></div>
    

    $('#data')
        .data('test1', 'this is test data 1')
        .data('test2', ['John', 'Smith'])
        .data('test3', {
            alert1: function() {
                $('#data').append('test3: successful<br>');
            }
        })
    

    现在,一旦这个页面进入iframe,我知道我可以按如下方式访问元素:

    $('#frame').contents().find('#data');
    

    $('#frame').contents().find('#data').data('test1'); // shows up as undefined
    

    我知道jQuery商店 data() 在内部 cache 对象,但我不知道如何从该文档外部访问它。我建立了 this demo

    如有任何意见,我将不胜感激:)

    2 回复  |  直到 9 年前
        1
  •  28
  •   Nick Craver    14 年前

    您需要从 那个

    var windowjQuery = $('#frame')[0].contentWindow.$;
    var f = $('#frame').contents().find('#data');
    

    然后要获取数据,请使用 $.data() ,就像这样:

    windowjQuery.data(f[0], 'test1')
    

    You can test out your updated/working demo here


    这实际上是在访问:

    var key = f[0][frame.contentWindow.$.expando];
    var dataItem = frame.contentWindow.$.cache[key]["dataKey"];
    
        2
  •  1
  •   Pekka    14 年前

    我从来没有试过,但我很确定你需要和iframe's谈谈 $ 对象而不是文档的对象来访问该对象的内部数据存储。不是百分之百确定怎么做-也许是

    $('#frame').contents().jQuery.find("#data").data("test")
    

    (胡乱猜测)

    可以肯定的是,iframe文档中有一个函数可以获取数据并将其返回给您。当然,这远不如直接取出来那么优雅。