2016-03-23 10 views
0

これは奇妙なものです。なぜこれが起こっているのか理解できません。クリックを介して、<a>タグの 'href'属性から取得したソースを持つ動的iframeを生成し、別のクリックでそれを破棄します。私は、そのiframe内に<body>タグの高さを取得しようとすると、様々な拡張可能領域に基づいて高さと幅を変更するプロセスを開始します。しかし、以下の例では、高さを取得するのではなく、jQuery Javascriptファイル(実際はjquery-1.11.1.js)から関数を直接取得しています。ここでは、関連するコードは次のとおりです。jQuery JSファイルから動的に生成されたiFrameの戻り関数から高さを取得

$(document.body).on('click', 'table.foo tr td a', function(e){ 
      e.preventDefault(); // anchor won't go to new page 
      e.stopPropagation(); // bubble-free click 
      var framesrc = $(this).attr('href') 
      $(this).closest('tr.varrow').after('<tr class="varFrameTr"><td colspan="2" class="varFrameCont"><iframe name="varFrame" class="varFrame" src='+framesrc+'></iframe><div class="closeiframe"><span class="glyphicon glyphicon-remove-sign"></span></div></td></tr>'); 
      var color = ''; 
      $('.varFrameTr').fadeIn(750, function(){ 
      if($('td.varFrameCont').length)  
       { 
        $(this).find('iframe.varFrame').contents().on('click', 'div#framefoo' ,function(){ 
        var tz = $(this).height; 
        console.log(tz); 
        }); 
       } else { 
        console.log('nada'); 
       } 
     }); 
    }); 

簡単に言うが、div#framefoo私はからの高さを取得しようとしていますインラインフレームで<body>後にメインコンテナです。しかし、新しいテーブル行がアップフェードとiframeが呼び出されたときに、コンソールにその高さを取得した結果は、ライン10206から始まるjqueryの-1.11.1.jsで関数を返します。

function(margin, value) { 
     var chainable = arguments.length && (defaultExtra || typeof margin !== "boolean"), 
      extra = defaultExtra || (margin === true || value === true ? "margin" : "border"); 

     return access(this, function(elem, type, value) { 
      var doc; 

      if (jQuery.isWindow(elem)) { 
       // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there 
       // isn't a whole lot we can do. See pull request at this URL for discussion: 
       // https://github.com/jquery/jquery/pull/764 
       return elem.document.documentElement[ "client" + name ]; 
      } 

      // Get document width or height 
      if (elem.nodeType === 9) { 
       doc = elem.documentElement; 

       // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest 
       // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it. 
       return Math.max(
        elem.body[ "scroll" + name ], doc[ "scroll" + name ], 
        elem.body[ "offset" + name ], doc[ "offset" + name ], 
        doc[ "client" + name ] 
       ); 
      } 

      return value === undefined ? 
       // Get width or height on the element, requesting but not forcing parseFloat 
       jQuery.css(elem, type, extra) : 

       // Set width or height on the element 
       jQuery.style(elem, type, value, extra); 
     }, type, chainable ? margin : undefined, chainable, null); 
    }; 

それは同じ結果ですもし私がちょうど<body>タグをつかんでその高さを取得しようとするならば。 jQuery関数がjQの実際のJSで何かと衝突することでブレークするエラーを見たことがありますが、戻り値としてコードを直接返すことはありません。任意のアイデア、なぜこれが起こっているのか、この非常に奇妙なエラーがなくてもiframeの高さと幅内の要素を取得する方法は?ご協力いただきありがとうございます。

答えて

0

私はまだ高さの数値ピクセル値の代わりに私が使用しているjQueryのバージョンから関数を得た理由を知りたいです。jquery-1.11.1.js。しかし、iframe要素の高さをGet height of element inside iframe with jQueryに配置する説明のおかげで、少なくとも私はその高さ情報を正しく取得できます。上記の私のコードのキー条件は次のようになります。

if($('td.varFrameCont').length) { 
        var mydiv = $('iframe.varFrame').contents().find('body'); 
        var h = mydiv.height(); 
        console.log(h); 
       } else { 
        console.log('nada'); 
       } 

そして、私の身長情報があります。私がjQueryのJSファイルから直接コードを取得した理由を他の人が理解するのを助けることができれば、私はこれが他者への道を開くのに役立つだろうと考えています。

関連する問題